在静态子类php中调用非静态函数
我有一个扩展普通类的单例类。(1类) 普通类有两个非静态函数,分别称为set()和get()。(第2类) 第三个类(Class3)获取单例(Class1)实例,通过单例使用set()和get()。使用Class3可以很好地工作,但是有没有办法在父类的单例中使用get()方法来查看“第三个”类将其设置为什么 我似乎不能调用get,因为它是非静态的。请让我知道这是否令人困惑在静态子类php中调用非静态函数,php,Php,我有一个扩展普通类的单例类。(1类) 普通类有两个非静态函数,分别称为set()和get()。(第2类) 第三个类(Class3)获取单例(Class1)实例,通过单例使用set()和get()。使用Class3可以很好地工作,但是有没有办法在父类的单例中使用get()方法来查看“第三个”类将其设置为什么 我似乎不能调用get,因为它是非静态的。请让我知道这是否令人困惑 class Class1 { public function doThings(){ $this-
class Class1 {
public function doThings(){
$this->view->set("css","1234");
}
}
class Singleton extends Class3 {
static public function instance()
{
if (!self::$_instance instanceof self) {
self::$_instance = new self();
}
return self::$_instance;
}
//I want this singleton to call get("css") and have it return the value.
}
class Class3{
public function get(arg){//implementation }
public function set(arg){//implementation }
}
我从来没有见过一个单例的特定类,它扩展了它应该是单例的类。相反,请尝试以下方法:
class Class3
{
private $_instance;
static public function instance()
{
if (!self::$_instance instanceof self) {
self::$_instance = new self();
}
return self::$_instance;
}
public function get(arg){//implementation }
public function set(arg){//implementation }
}
// Calling code
// I want this singleton to call get("css") and have it return the value.
Class3::getInstance()->set('css', 'border:0');
Class3::getInstance()->get('css');
我刚刚解决了我自己的问题,很抱歉回复晚了 在singleton中,我所要做的就是这样调用get():
self::instance()->get("css");
你让我们告诉你这是否令人困惑。这让人困惑。好吧,我发布了代码片段:)你需要普通类做什么?为什么要用单例模式扩展它?普通类是一个模板类,我想通过我的单例来扩展它以使用许多有用的函数。单例应该做什么?你能展示更多的代码吗?这很好,唯一的问题是,除了get和set之外,还有很多函数,我不能在单例中实现它们,因此扩展了。你没有“在单例中实现它们”,单例代表了class3的一个实例,这意味着它可以访问每个公共成员变量和函数,就像它扩展了class3一样。哦,等等,我收回我说过的话。我没有注意到您的解决方案是class3,而不是singleton。请小心,如果您选择对另一个类执行相同的操作,则会导致命名空间冲突。如果您想对class2执行相同的操作,该怎么办?现在将有两个名为Singleton的类,这将由于名称空间冲突而导致错误。我建议您使用我的解决方案,这样您以后就可以避免这个问题。谢谢,这很有意义。虽然它永远不会被用在这种方式没有担心,只是让你意识到未来可能的问题。祝你好运