我刚开始学习面向对象编程,目前正在尝试自己实现MVC框架,纯粹是为了学习目的。我正在阅读Apress PHP-Objects Patterns Practice书中的教程。我使用了私有__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);
我遇到了解析错误。我只能使用范围解析运算符(即“::”)来访问方法。
我猜这是因为对象包装器没有被实例化 - 但我只想要验证/讨论一下这个问题...