在静态类方法中调用get_called_class()
和static::class
有什么区别?
例如:
class Base
{
public static function foo()
{
return static::class;
}
public static function bar()
{
return get_called_class();
}
}
class Child extends Base {}
echo Base::foo(); // prints 'Base'
echo Base::bar(); // prints 'Base'
echo Child::foo(); // prints 'Child'
echo Child::bar(); // prints 'Child'
在这两种情况下似乎都是一样的,但我可能会注意到一些细微差别。
答案 0 :(得分:3)
static::class
was "only" added in PHP 5.5,但除此之外,它们应该完全相同。
通过快速测试,static::class
似乎稍快一点。使用问题中的代码:
profile("Parent, static::class", function () { Base::foo();});
profile("Parent, get_called_class", function () { Base::bar();});
profile("Child, static::class", function () { Child::foo();});
profile("Child, get_called_class", function () { Child::bar();});
Parent,static :: class花了0.0467秒
Parent,get_called_class花了0.0559秒
Child,static :: class花了0.0468秒
Child,get_called_class花了0.0554秒
但你必须做好六位数的迭代才能注意到。请参阅https://3v4l.org/qaXln(3v4l肯定不是基准测试的最佳工具,但有足够的模式)