Функция набора статических магических переменных php - PullRequest
2 голосов
/ 19 января 2011

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

Основная разбивка рассматриваемого кода:

$__CMS_CONN__ = new PDO(DB_DSN, DB_USER, DB_PASS);
Record::connection($__CMS_CONN__);

Первый вопрос, я знаю, что двойное подчеркивание делает его волшебным, но я нигде не смог точно определить, какие свойства распространяются на него, за исключением того, что он ведет себя как константа, своего рода. Так что это значит?

class Record
{
    public static $__CONN__ = false;
    final public static function connection($connection)
    {
        self::$__CONN__ = $connection;
    }
}

Во-вторых, эти две части идут вместе. Они каждый в отдельных файлах. Из того, что я прочитал, на статические переменные можно ссылаться так же, как и на статические функции, поэтому не могли бы вы просто вызвать переменную и установить ее напрямую вместо использования функции?

У меня такое ощущение, что это больше, чем я знаю, но мне нужно с чего-то начать.

Ответы [ 4 ]

4 голосов
/ 19 января 2011

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

Это просто статическое свойство класса. Это означает, что он используется несколькими экземплярами этого класса (в одном и том же php-запросе).

Посмотрите документы для статических свойств , если вы не знаете, как они работают.

2 голосов
/ 19 января 2011

Существует несколько предопределенных « магических констант », которые используют этот стиль именования. Тем не менее, я не думаю, что подчеркивания означают что-то особенное (что касается языка); то есть определение вашей собственной переменной таким образом не наделяет ее магическими свойствами. Это может быть частью соглашения о присвоении имен предыдущего программиста, и если это так, то это, вероятно, опрометчиво.

Установка свойства с помощью функции может, во многих случаях, сделать «клиентский» код более устойчивым к изменениям в реализации класса. Все детали реализации могут быть скрыты внутри метода (называемого «сеттером»). Тем не менее, есть сильные чувства по поводу того, хорошая ли это идея или нет (например, я не большой поклонник).

1 голос
/ 17 января 2012

В руководстве по PHP сказано об именовании переменных (и других символов) с подчеркиванием :

PHP резервирует все символы, начинающиеся с __, как магические.Не рекомендуется создавать символы, начинающиеся с __ в PHP, если вы не хотите использовать документированные магические функции.

Обратите особое внимание на использование слов «резервы» и «документировано».Они означают, что двойные подчеркивания не должны использоваться для определяемых пользователем символов, так как это может привести к будущим конфликтам, и что если символ явно не упоминается в руководстве как магический, он является обыденным.

1 голос
/ 19 января 2011
  1. Два подчеркивания не создают переменную магию.
  2. Лучше использовать метод получения / установки, чем прямой доступ к свойствам класса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...