2012-02-25 37 views
9

是否有可能在PHP中使用匿名回調函數訪問selfstatic$this中的類/對象?就像這樣:

class Foo { 
    const BAZ = 5; 
    public static function bar() { 
     echo self::BAZ; // it works OK 
     array_filter(array(1,3,5), function($number) /* use(self) */ { 
      return $number !== self::BAZ; // I cannot access self from here 
     }); 
    } 
} 

有沒有什麼辦法讓它表現爲與通常的變量,使用use(self)條款?

+1

從PHP 5.4開始,可以使用$ this。 – 2012-02-25 17:39:37

+0

*(相關)* [PHP 5.4 - '封$這種支持'(http://stackoverflow.com/questions/5734011/php-5-4-closure-this-support/5734109#5734109) – Gordon 2012-02-25 17:52:11

回答

13

隨着PHP5.4這將是。目前這是不可能的。但是,如果你只需要訪問公共屬性,方法

$that = $this; 
function() use ($that) { echo $that->doSomething(); } 

對於常量沒有理由使用合格的名稱

function() { echo Classname::FOO; } 
+1

感謝回答。但是,如果我需要替換static :: FOO,也就是後期綁定,則不可能使用Classname。 – 2012-02-25 17:55:35

+1

聽起來你比常數更多地尋找類屬性(又名靜態屬性)。然而,在我的答案中的第一個例子,你應該能夠像'$ that :: FOO'那樣調用常量。 – KingCrunch 2012-02-25 18:09:32

+0

其實,我認爲要做OP什麼的,以後期綁定它不會是這樣:$ that = static :: FOO; – 2013-08-27 13:50:11

4

只需使用標準方法:

Foo::BAZ; 

$baz = self::BAZ; 
... function($number) use($baz) { 
    $baz; 
} 
0

這個怎麼樣:

class Foo { 
    const BAZ = 5; 
    $self = __class__; 
    public static function bar() { 
     echo self::BAZ; // it works OK 
     array_filter(array(1,3,5), function($number) use($self) { 
      return $number !== $self::BAZ; // access to self, just your const must be public 
     }); 
    } 
}