PHP单例模式找不到抽象的函数,求正确写法。
abstractA{publicfunctionget($key){...}publicfunctionset($key,$arg){...}}classBextends...
abstract A
{
public function get($key) {...}
public function set($key,$arg) {...}
}
class B extends A
{
static public $instance = null;
static public $porp = null;
function __construct(){
if(null == self::$instance ){
self::$instance = new Helper_In($item);
}
return self::$instance->get();
}
function test(){
get_called_class()->set($porp,'您好');
}
}
$obj = new B
$obj->test(); //Fatal error: Call to a member function set() on a non-object in D:\website\...\B.class.php on line 158
求解? 展开
{
public function get($key) {...}
public function set($key,$arg) {...}
}
class B extends A
{
static public $instance = null;
static public $porp = null;
function __construct(){
if(null == self::$instance ){
self::$instance = new Helper_In($item);
}
return self::$instance->get();
}
function test(){
get_called_class()->set($porp,'您好');
}
}
$obj = new B
$obj->test(); //Fatal error: Call to a member function set() on a non-object in D:\website\...\B.class.php on line 158
求解? 展开
3个回答
展开全部
不是非常理解你的意思,对get_called_class我没怎么研究过,不过可以肯定你这样定义单例模式是不对的。也许你可以试试以下的代码。
class B extends A {
private static $_instance = false;
private function __construct(){};
public static function getInstance() {
if (false === self::$_instance) self::$_instance = new self();
return self::$_instance;
}
public function test($key, $value) {
$this->set($key, $value);
}
}
你的代码中的
function test(){
get_called_class()->set($porp,'您好'); //$porp是什么?从何而来?是不是想写set('port', '您好')?
同样,new Helper_In($item); 这个$item是什么东西?
function前面什么都不写等同于public,明显,如果一个类可以通过new关键字获取实例的话是不可能实现单件模式的。
另外,我觉得你对变量作用域等基础知识都不够了解,建议你还是先掌握好基础知识然后再进行更高级的尝试。
来自:求助得到的回答
展开全部
function test(){
get_called_class()->set($porp,'您好');
}
这里应该改成:
get_called_class()=$this->set($porp,'您好‘);
get_called_class()->set($porp,'您好');
}
这里应该改成:
get_called_class()=$this->set($porp,'您好‘);
追问
谢谢您的回复。
我是需要调用 static 才用 get_called_class的。
其实
get_called_class()=self::set()
get_called_class()=$this->set()
get_called_class()->setset()
在某种程度上来说,是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要是调父类的get方法 还是想调取父类抽象方法?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询