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

求解?
展开
 我来答
百度网友a19d193
2013-07-01 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1427万
展开全部

不是非常理解你的意思,对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关键字获取实例的话是不可能实现单件模式的。


另外,我觉得你对变量作用域等基础知识都不够了解,建议你还是先掌握好基础知识然后再进行更高级的尝试。

来自:求助得到的回答
80眼
2013-06-29 · 80眼--寻找80后喜爱的电影
80眼
采纳数:62 获赞数:72

向TA提问 私信TA
展开全部
function test(){
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()
在某种程度上来说,是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyhyab4691
2013-06-29
知道答主
回答量:66
采纳率:0%
帮助的人:38万
展开全部
你要是调父类的get方法 还是想调取父类抽象方法?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式