Intereting Posts
Woot-badge как в PHP Разделитель регулярных выражений PHP, в чем смысл? Как я могу заставить целочисленные значения json_encode PHP быть закодированными как String? сохранение параметров URL во время разбивки на страницы Laravel, вам нужно указать путь к файлу для хранения семени Создание веб-интерфейса для Android-приложения с использованием API-интерфейсов Android. Любая инфраструктура для PHP, эффективная как Django для Python? Codeigniter Active Record – количество найденных строк с ограничением (MySQL) php сравнить два вложенных массива и предсказать разницу Автозаполнение формы, заполненной базой данных? Symfony2 Doctrine2 – генерировать аннотацию One-To-Many из существующей базы данных по доктрине: mapping: import Посмотрите, прослушивает ли сервер порт на PHP? Многомерный поиск массива с использованием php Автозаполнение Eclipse не работает для PHP-проекта PHP объединяет два ассоциативных массива в один массив

Важно ли явно декларировать свойства в PHP?

Я последовал за учебником по созданию простого приложения для написания блога на PHP и изменил классы в этом учебнике, чтобы у них были дополнительные возможности. Изменение этого очень голого приложения показало мне лучшее понимание того, как работает PHP, однако я столкнулся с интересной ситуацией.

Один из классов в моем проекте имеет около полутора десятков свойств класса, таких как public $id, public $author, public $post . Эти свойства объявлены в начале этого класса, однако я обнаружил, что если я удалю все, кроме одного из этих свойств, приложение все еще функционирует правильно.

Неправильно ли удалить объявление свойства, например public $datePosted с начала класса, если этот класс по-прежнему назначает переменные этому свойству следующим образом: $this->datePosted = $someVariableName;

Если вы попытаетесь открыть свойство класса, которое не было объявлено, PHP опубликует уведомление:

 class Foo { } var $fu = new Foo(); echo $fu->baz; 

Notice: Undefined property: Foo::$baz in blah.php on line 4

Если вы сначала установите значение ( $fu->baz = 'blah' ), оно не будет жаловаться, но это не очень хорошая ситуация.

Вы должны определенно объявить все переменные класса (если, конечно, вы не хотите весело провести время с помощью магических методов ) …

для всех, кто читает ваш код, более ясно, что члены явно определены как общедоступные, а не просто дефолтны, потому что вы не назначили их как публичных членов.

Кроме того, $this->$datePosted ошибочно, это должно быть примерно так:

 $this->datePosted = $someVariable; 

поэтому может возникнуть ошибка.

PHP действительно свободен от того, как он обрабатывает определения членов класса. Вы технически не обязаны их объявлять. Но вы должны по двум причинам:

  • Люди с умными IDE (Eclipse, Aptana, Zend Studio) будут любить, если они смогут использовать код своего редактора intellisense (автозаполнение) во время работы с вашими классами. Эта функция действительно помогает предотвратить ошибки, связанные с опечатками. Если вы не объявляете свои поля, в среде IDE нет реального способа определения полей класса.

  • Кто-то, только что закончивший работу с компилируемым языком (C ++), скорее всего, отправит за вами хита, если у них появятся недостатки правильно определенных полей. Это просто хорошая практика, чтобы объявить их. Нет причин не делать этого.

Кроме того, если вы удаляете декларацию, и код читает эту переменную до того, как ее наберет, у вас будет ошибка, например

Замечание PHP: Неопределенное свойство: A :: $ неисследованное в C: \ temp \ test.php в строке 8

Примечание. Неопределенное свойство: A :: $ неисследованное в C: \ temp \ test.php в строке 8