2013-02-19 64 views
0

我需要知道什麼樣的調用一個靜態方法,而不發送作爲參數PHP - 哪個類調用了我的靜態方法?

class foo 
{ 
    public static function test($clase) 
    { 
     echo "Class invoke:" . FUNCTION(); 
    } 
} 

class A { public function x { foo::test(); } } 
class B { public function y { foo::test(); } } 
class C { public function z { foo::test(); } } 
+7

您可以使用'debug_backtrace()',但我希望這不適合生產使用? – 2013-02-19 21:52:22

+0

您可以將'get_class()'作爲參數傳遞給'test()'。 – 2013-02-19 22:00:17

回答

0

您可以使用後期靜態綁定和get_called_class()(PHP> = 5.3),如果你把所有的類都擴展foo,這樣:

class foo 
{ 
    public static function test($clase) 
    { 
     echo "Class invoke:" . get_called_class(); 
    } 
} 

class A extends foo { public function x() { self::test(''); } } 
class B extends foo { public function y() { self::test(''); } } 
class C extends foo { public function z() { self::test(''); } } 

與這些對象:

$a = new A; $a->x(); 
$b = new B; $b->y(); 
$c = new C; $c->z(); 

get as output

Class invoke:A 
Class invoke:B 
Class invoke:C 
+0

感謝您的回覆,有什麼方法沒有繼承? – Ronald 2013-02-20 00:32:05

+0

不要將類名傳遞給'test()'。 – nickb 2013-02-20 02:05:34

+0

@nickb不,有:)。使用'debug_backtrace()'。但是,對於任何生產用途來說,這都不是一個好主意。 – 2013-02-20 13:00:16