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]; } } 

  • DomDocument и специальные символы
  • PHP - Получение внутренней переменной float
  • Функция NOW () в PHP
  • Создание выпадающего списка часовых поясов с помощью PHP
  • SMTP-сервер с XAMPP?
  • Сохранение HABTM с дополнительными полями?
  • Существует ли прецедент для одиночных игр с доступом к базе данных в PHP?
  • PHP шаблоны дизайна memcache
  • Создание шаблона проектирования Singleton в PHP5
  • Контейнер для инъекций зависимостей против шаблона реестра
  • Глобальный или Singleton для подключения к базе данных?
  • Используя шаблон Data Mapper, должны ли объекты (объекты домена) знать о Mapper?
  • 2 Solutions collect form web for “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);

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

    PHP is the Best Programming Language in the world.