Intereting Posts
php array находит дубликаты, суммирует их и удаляет дубликаты Будет ли порядок данных в почтовой форме одинаковым для него в веб-форме? Установите Dingo в Laravel 5.2 и получите ошибку при вызове api Как я могу заставить PHP mail () работать? Нужна помощь в настройке MTA parent.location.reload в iframe не работает IE PHP-элемент функции синтаксиса из кода Javascript Как загрузить файл в JavaScript и PHP без использования FormData Объектно-ориентированное программирование -> Оператор Какое преимущество использует фреймворк, такой как CodeIgniter или CakePHP, с использованием PHP? jquery validate и php captcha issue Как переопределить систему электронной почты Sylius Как создать многоуровневое меню навигации с помощью базы данных с помощью Laravel Обнаружение ошибки PHP Mailer и печать сообщения на веб-сайте с помощью jquery PHP предназначен как css, но используется как текст MIME text / html PHP date () и strtotime () возвращают неправильные месяцы 31-го

PHP-шаблон реестра

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

class Registry { private $vars = array(); public function __set($key, $val) { $this->vars[$key] = $val; } public function __get($key) { return $this->vars[$key]; } } 

Related of "PHP-шаблон реестра"

Он использует PHP, взломанный при перегрузке свойств, чтобы добавлять записи и извлекать записи из частного массива $vars .

Чтобы добавить свойство, вы должны использовать …

 $registry = new Registry; $registry->foo = "foo"; 

Внутри это добавило бы ключ foo в массив $vars со строковым значением «foo» с помощью магического метода __set .

Чтобы получить значение …

 $foo = $registry->foo; 

Внутренне это приведет к извлечению записи foo из массива $vars помощью магического метода __get .

Метод __get действительно должен проверять несуществующие записи и обрабатывать такие вещи. Код as-is вызывает ошибку E_NOTICE для неопределенного индекса.

Лучшая версия может быть

 public function __get($key) { if (array_key_exists($key, $this->vars)) { return $this->vars[$key]; } // key does not exist, either return a default return null; // or throw an exception throw new OutOfBoundsException($key); } 

Возможно, вы захотите проверить PHP.NET – перегрузка

В принципе, вы бы сделали …

 $Registry = new Registry(); $Registry->a = 'a'; //Woo I'm using __set echo $Registry->a; //Wooo! I'm using __get 

Таким образом, здесь я использую __set($a, 'This value is not visible to the scope or nonexistent') Кроме того, я использую __get($a);

Надеюсь, это помогло!