在PHP中访问单例方法
发布时间:2020-12-13 21:34:56 所属栏目:PHP教程 来源:网络整理
导读:我刚刚开始我的OOP之旅 – 我现在正在尝试推出自己的MVC – 纯粹是出于学习目的.我正在编写Apress PHP-Objects模式实践手册中的教程.我使用private __construct / __ clone技术创建了一个注册表单例对象: class Registry{ private static $instance; privat
我刚刚开始我的OOP之旅 – 我现在正在尝试推出自己的MVC – 纯粹是出于学习目的.我正在编写Apress
PHP-Objects模式实践手册中的教程.我使用private __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); 我得到一个解析错误.我只能使用范围解析运算符访问方法 – 即’::’. 我假设这是因为对象包装器尚未实例化 – 但我只是想与你们一起验证/讨论这个问题… 解决方法
Registry :: getInstance()返回类Registry的(实际上是唯一的)实例.它具有与新Registry()相同的返回值,只是在整个应用程序中只能有一个实例.这些是您访问方法的可能性:
// #1 $registry = Registry::getInstance(); $registry->set($key,$value); // #2 Registry::getInstance()->set($key,$value); 另一招: 将get()和set()映射到他们的魔术方法. public function __set($key,$value) { return $this->set($key,$value); } public function __get($key) { return $this->get($key); } 所以你可以使用Registry :: getInstance() – > set($key,$value);或Registry :: getInstance() – > $key = $value; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |