【发布时间】:2010-11-16 07:33:44
【问题描述】:
我刚刚开始我的 OOP 之旅 - 我目前正在尝试推出自己的 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);
我得到一个解析错误。我只能使用范围解析运算符访问方法 - 即'::'。
我假设这是因为对象包装器尚未实例化 - 但我只是想与大家验证/讨论这个问题......
【问题讨论】:
标签: php oop static singleton methods