2013-02-19 3 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()', но я надеюсь, что это не для использования в производстве? –

+0

Вы можете передать 'get_class()' в качестве аргумента 'test()'. –

ответ

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

+0

Не пропуская имя класса 'test()'. – nickb

+0

@nickb Нет, есть :). Использование 'debug_backtrace()'. Но опять же, это не хорошая идея для любого вида использования. –

Смежные вопросы