Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-哪个类调用了我的静态方法?_Php_Methods_Static - Fatal编程技术网

PHP-哪个类调用了我的静态方法?

PHP-哪个类调用了我的静态方法?,php,methods,static,Php,Methods,Static,我需要知道哪种调用静态方法,而不作为参数发送 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 functi

我需要知道哪种调用静态方法,而不作为参数发送

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(); } }

如果让所有类扩展
foo
,则可以使用后期静态绑定和(PHP>=5.3),如下所示:

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();
你将:


您可以使用
debug\u backtrace()
,但我希望这不是用于生产?您可以将
get\u class()
作为参数传递给
test()
。感谢您的回复,有没有不继承的方法?没有将类名传递给
test()
@nickb不,有:)。使用
debug\u backtrace()
。但是,对于任何一种生产用途,都不是一个好主意。我必须发送一个对象作为一个参数,谢谢“NICB”,因为正如Colin Morelli所说的,使用Debug GraceBracTrink“对于任何一种生产用途都不是一个好主意。”@柯林-我不认为<代码> Debug GraceBracTrace()/代码>是一种可行的或有效的解决方案。如果你不得不在建议后面加上“不要在生产中使用”,这不是一个可行的解决方案。
Class invoke:A
Class invoke:B
Class invoke:C