在静态子类php中调用非静态函数

时间:2012-02-15 23:02:31

标签: php

我有一个扩展普通类的单例类。 (1类)

普通类有两个非静态函数,叫做set()和get()。 (等级2)

获得单例(Class1)实例的第三个类(Class3)使用set()和get()通过单例。它使用Class3工作正常,但有没有办法在父类的单例内使用get()方法来查看“第三”类将它设置为什么?

我似乎无法调用get,因为它不是静态的。如果这令人困惑,请告诉我。

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 }
}

2 个答案:

答案 0 :(得分:2)

我从来没有见过特定的类只是为了扩展它应该是单身的类的单例。相反,试试这个:

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');

答案 1 :(得分:0)

我刚刚解决了我自己的问题,对于迟到的回复感到抱歉。

我在单身人士中所做的只是以这种方式调用get():

self::instance()->get("css");