Я последовал за учебником по созданию простого приложения для написания блога на 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