Я только начинаю свое путешествие в ООП - и в настоящее время я пытаюсь развернуть свой собственный MVC - исключительно для целей обучения. Я работаю над учебником в книге Практика шаблонов Apress PHP-Objects. Я создал одноэлементный объект реестра, используя частную технику __construct / __ clone:
class Registry
{
private static $instance;
private $values = array();
private function __construct(){}
private function __clone(){}
public static function getInstance(){
if( !isset( self::$instance ) ){
self::$instance = new Registry();
}
return self::$instance;
}
public function get( $key ) {
if ( isset( $this->values[$key] ) ) {
return $this->values[$key];
}
return null;
}
public function set( $key, $val ) {
$this->values[$key] = $val;
}
}
Я получаю экземпляр этого объекта напрямую, т.е.:
Registry::getInstance();
Однако (следуя синтаксису в учебнике) - если я пытаюсь получить доступ к публичным методам, используя метод '->' - например:
Registry->setVal('page',$page);
Я получаю ошибку разбора. Я могу получить доступ только к методам, используя оператор разрешения области видимости - т.е. '::'.
Я предполагаю, что это потому, что объектная оболочка не была создана - но я просто хочу проверить / обсудить эту проблему с вами ...