簡體   English   中英

我可以將非靜態對象放入靜態屬性嗎?

[英]Can I put a non-static object in a static property?

我可以這樣做嗎?

class A {
    public function foo() { echo "whatever";}
}
class B {
    static public $var;
    static function initVar($var) { self::$var = $var; }
    static public function bar() { return self::$var->foo(); }
}
class C {
    public function baz() {
        $a = new A();
        B::initVar($a);
        echo B::bar(); // should print "whatever"
    }
}

如果不是,是否有任何方法可以使用靜態方法訪問給定的對象實例?

是的你可以。 通常這是實現Singleton(僅應實例化對象的一種模式)的方式。 雖然這種模式被認為是糟糕的...

http://en.wikipedia.org/wiki/Singleton_pattern

示例(盡管在同一個類中...):

class A
{
   private static $inst;
   public static function instance()
   {
        if (self::$inst === NULL)
        {
            self::$inst = new A();
        }
        return self::$inst;
   }
   /* constructor etc */
}

$a = A::instance();
$a->someMethod();

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM