Я новичок в парадигме ООП, поэтому, возможно, это просто объяснение этого вопроса …
Вам всегда нужно объявлять общедоступные объектные переменные в классе? Например:
<?php class TestClass { var $declaredVar; function __construct() { $this->declaredVar = "I am a declared variable."; $this->undeclaredVar = "I wasn't declared, but I still work."; } function display() { echo $this->declaredVar . "<br />"; echo $this->undeclaredVar; echo "<br /><br />"; } } $test = new TestClass; $test->display(); $test->declaredVar = "The declared variable was changed."; $test->undeclaredVar = "The undeclared variable was changed."; $test->display(); ?>
В этом коде, хотя $declaredVar
является единственной объявленной переменной, $undeclaredVar
такой же доступный и доступный – кажется, он действует так, как будто я объявил его публичным.
Если необъявленные переменные класса всегда доступны так, то в чем смысл объявлять их все впереди?
Эта переменная не является неинициализированной, она просто не объявлена.
Объявление переменных в определении класса является точкой стиля для удобочитаемости. Кроме того, вы можете установить доступность (закрытую или открытую).
В любом случае, объявление переменных явно не имеет ничего общего с ООП, это зависит от языка программирования. В Java вы не можете этого сделать, потому что переменные должны быть объявлены явно.
Если вы объявляете члена внутри класса, вы можете установить его доступность, например
private $varname;
Вы всегда должны объявлять переменные-члены и указывать их доступность в своих классах. Мне нравится передавать эту информацию в конце класса после моих функций.
Вы должны определить их, как только у вас будет достаточно информации для этого. Возможно, в конструкторе или через функции setter.
Это важно сделать, потому что это облегчает жизнь людям, работающим с вашим кодом. Им не нужно догадываться, откуда берутся разные свойства или почему они там. Кроме того, большинство (если не все) IDE не будут подбирать переменные класса, если вы их не объявили. Кодовое завершение / подсказки являются одним из многих преимуществ IDE и без объявления ваших переменных, вы окажете эту функцию бесполезно.
Общая парадигма ООП инкапсуляции говорит, что вы не должны выставлять свои внутренние переменные состояния, что означает, что они должны быть частными, что позволяет вам изменить реализацию вашего класса без необходимости изменять код, в котором вы его используете. Лучше практиковать инициализацию переменных с помощью конструкторов и метода getters и seters класса.
В общем случае переменные должны быть инициализированы, как только у вас будет достаточно информации, чтобы сделать это правильно.
Если переменная класса нуждается в определенном значении, то эта информация должна быть передана конструктору.
Используя синтаксис PHP для неявного объявления переменных в точке определения, IMHO – верный способ введения ошибок – если ваш класс нуждается в переменной, тогда объявите его и используйте всю информацию, скрывающуюся, которую предоставляет ООП.
Как сказал Федерико Куллока: «Эта переменная не является неинициализированной, она просто не объявлена». Также вы не определили для них никаких модификаторов доступа, чтобы они применяли их к публичному модификатору.
Возможно, вы уже знали. PHP – это свободно типизированный язык. Но программист должен всегда следовать лучшим практикам (но не использовать примитивные типы данных в php).
Вы должны использовать частный модификатор для переменных уровня класса и предоставить для них методы доступа и мутатора (Getters and Setters).