【问题标题】:PHP - Which class invoked my static method?PHP - 哪个类调用了我的静态方法?
【发布时间】:2013-02-19 21:51:44
【问题描述】:

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

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

【问题讨论】:

  • 您可以使用debug_backtrace(),但我希望这不是用于生产用途?
  • 您可以将get_class() 作为参数传递给test()

标签: php methods static


【解决方案1】:

如果您让所有类都扩展 foo,则可以使用后期静态绑定和 get_called_class() (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();

你会get as output:

Class invoke:A
Class invoke:B
Class invoke:C 

【讨论】:

  • 谢谢回复,有没有不继承的办法?
  • 必须将类名传递给test()
  • @nickb 不,有:)。使用debug_backtrace()。但同样,对于任何形式的生产用途来说,这都不是一个好主意。
  • 我必须发送一个对象作为参数,谢谢@nickb,因为正如 Colin Morelli 所说,使用 debug_backtrace “对于任何形式的生产使用都不是一个好主意。”
  • @Colin - 我不认为debug_backtrace() 是可行或有效的解决方案...如果您必须在建议后缀“不要在生产中使用它”,这不是可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多