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'
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它的工作原理似乎相同,但可能有一些我应该注意的细微差别。
static::class “仅”在 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();});
Run Code Online (Sandbox Code Playgroud)
父级,static::class 花费了 0.0467 秒
父级,get_called_class 花费了 0.0559 秒
子级,static::class 花费了 0.0468 秒
孩子,get_called_class 花费了 0.0554 秒
但你必须在六位数的迭代中表现出色才能注意到。请参阅https://3v4l.org/qaXln(3v4l绝对不是基准测试的最佳工具,但有足够的模式)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |