Скажите, есть ли в чем то преимущество у второго варианта, перед первым: первый: Код (PHP): function Show1($message) { echo $message; } второй: Код (PHP): function Show2(string $message) { echo $message; }
Как выше говорили будет работать только array и object. А преимущества - строгая типизация. Для меня уменьшает количество потенциальных ошибок, делает код более приятным и понятным. В PHP такого к сожалению нету.
ладно, я понял, что ни чего не понял ну а точнее, пользоваться нужно иногда, там где это действительно нужно, как то так.
И еще такой вопрос возник, а возможно ли сделать так, что бы ну что бы функция возвращала значение определенного типа, ну например как в С#: Код (Text): public string xxx() // данная функция возвращает переменную только типа string { /* **** */ }
в смысле вот так вот: Код (PHP): class cls {} function fns() { return new cls(); } $var = (cls)fns(); но у меня выдает ошибку.
Ну потому что так нельзя. Если уже возвращаешь класс, никуда его приводить не надо. А вот для скалярных значений вполне можно писать что-то вроде Код (Text): function f() { return (int) $n; } А вообще, PHP нетипизированный язык, к этому надо привыкнуть. Я, когда вернулся после долгого перерыва в программирование, и начал изучать php, тоже всё удивлялся после Паскаля и С++, как так - переменная, и без типов... Сейчас привык.
тип есть у каждой переменной! просто типизация динамическая, но она есть всегда. и зачастую тип меняется неявно при приобразованиях. но пхп предоставляет инструменты и для явного приведения типа, если это нужно. так что - никаких проблем
Когда я создавал тему мне было интересно в чем различия, после того как я ее создал, я сразу открыл редактор, написал, затестил и понял. У меня такое часто бывает, создаю тему с вопросом, тут же начинаю сам искать ее решение, нахожу / проверяю до получения первого ответа. Я знаю что это плохо, но я ни чего не могу с собой поделать. так вот при тесте я заметил одну очень хорошую штуку, если я указываю тип, то я могу обращаться к переменной в IDE, как к переменной определенного типа, я понимаю что вы сейчас ни чего не поняли, я приведу пример $cls объект класса cls, но как видите не показывает свойства и методы этого класса, это не удобно, надо в ручную писать (не надо разъяснять почему так, я и так все понимаю) а вот если указываю какую переменную я получаю, все ок, мне отображаются свойства и методы этого класса: но это на прием переменной, а хотелось бы что бы еще при возвращении функцией / методом значения IDE знала какой тип мы возвращаем, и отображала свойства и методы этого класса, т.е. (вопрос собственно на скриншоте): я надеюсь суть моего вопроса ясна.
как бы контроль целостности данных и хинты в идеешечке - две разные вещи. тип переменной идеешке можно явно задать через однострочный комментарий. да и вообще документация кода помогает иде ускорять процесс написания кода.
Если суть в том, чтоб ide подсвечивала, можно использовать phpdoc, NetBeans его понимает: Код (PHP): /** @return cls */ function ret() { return new cls; }
Существует такая штука, как phpdoc, выглядеть это может примерно так: Код (PHP): function myFunction($item) { /** @var User $item */ /* ... */ } и ide поймет что добавлять в подстановку. Если говорить о теме вообще, лично я стараюсь использовать подобные вещи, проставляя класс объекта, либо его интерфейс. К примеру, у нас есть табличка images, в которой хранятся изображения от разных сущностей: мы им прописываем ImageInterface и указываем его в качестве принимаемого типа. На первый взгляд совершенно лишняя заморочка, но если проект растет в размерах, то позволяет избежать глупых ошибок ещё на стадии написания кода. Да и в целом, такой подход не дает забыть нужный метод, перепутать аргументы и т.п.
Спасибо всем за ответы, что то понял, а что то пойму при написании ближайшего проекта (просто сейчас изучаю JS), спасибо еще раз.