Защищенные свойства с префиксом подчеркивания

Подобно:

public $foo = null, $bar = 10; protected $_stuff = null, $_moreStuff = 5; 

Многие люди, похоже, это делают. Зачем?

Разве это непоследовательное именование (например, некоторые функции PHP :))?

Это действительно сводится к одному: личное предпочтение.

Я лично являюсь тем, кто использует это соглашение об именах. Префикс любого protected или private с помощью символа подчеркивания, будь то переменная или функция, позволяет мне и любому другому программисту, с которым я регулярно работаю, знаю, что эта переменная является глобальной и не будет доступна за пределами текущего класса / контекста.

Пример, который поможет уточнить прецедент, будет с методами класса:

 class Example { public function firstFunction() { // do stuff } protected function _secondFunction() { // do more stuff } } 

Когда я пишу код, который использует класс Example , или работает внутри самого класса, если я вижу _secondFunction() я сразу же узнаю, что он не является публичной функцией из-за начального _ и, следовательно, недоступен вне класса; нет необходимости идти и находить объявление фактической функции и видеть модификатор. С другой стороны, я буду знать, что firstFunction() является общедоступным, потому что он не начинается с одного.

Это старое соглашение со времен до php5.

У Php4 была только видимость общественности, и каким-то образом люди хотели узнать, является ли свойство предназначено для публичного или частного (то же самое для методов). Префикс подчеркивания обозначает частные члены или методы, которые не предназначены для использования извне.

Хотя, строго говоря, это необязательно с php5, где вы можете явно отмечать видимость члена класса, это соглашение по-прежнему распространено. Пользователи утверждают, что это упрощает проскальзывание кода, так как вы можете сразу увидеть, можете ли вы также вызвать эту функцию извне или нет. Это зависит от личных предпочтений или стиля кодирования данного проекта.

Символ подчеркивания означает, что переменная имеет некоторое специальное свойство (которое предопределено и может изменяться от организации к организации или программисту программисту). Традиционно это означает, что что-то не является публичным. Даже функции записываются иногда как:

 protected function _myProtectedFunction(){} 

Однако также обратите внимание, что PHP резервирует все имена функций, начиная с __ (два подчеркивания), как магические, и рекомендуется, чтобы вы не использовали имена функций с __ на PHP, если вы не хотите каких-либо документированных магических функций.

Для сравнения, Python не имеет частного / публичного дизайна и использует символы подчеркивания для передачи разграничения. См. Этот раздел PEP 8:

http://www.python.org/dev/peps/pep-0008/#designing-for-inheritance

Таким образом, это не обязательно просто старая пред-PHP5-конвенция – люди могут делать это намеренно по той же причине, что и Python.

Просто потому, что php делает это уже с такими вещами, как _SESSION, _GET, _POST, _REQUEST, поэтому это шаблон, который легко узнаваем.

Это, безусловно, просто личное предпочтение. Они могут сделать это из-за $ _GET и $ _SESSION, которые уже выполняются так же, как в PHP.