php - get_call_class() 和 static::class 之间的区别
问题描述
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'
在这两种情况下它似乎都起作用,但我应该注意一些细微差别。
解决方案
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();});
父级,static::class 耗时 0.0467 秒
父级,get_call_class 耗时 0.0559 秒
Child, static::class 耗时 0.0468 秒
孩子,get_call_class 花了 0.0554 秒
但是你必须在六位数的迭代中做得很好才能注意到。请参阅https://3v4l.org/qaXln(3v4l绝对不是基准测试的最佳工具,但有足够的模式)
推荐阅读
- android - 如何使用 git rev-list 列出要变基的补丁
- javascript - React webkit 前缀用于粘性位置
- java - 在运行时更改 FloatingActionButton 背景颜色
- android - Android中UI组件的基本操作
- java - 可执行 jar 中的 Apache POI
- jquery - 使用 $(this) 时,$(document).on() 在 ajax 之后不起作用
- https - TLS 版本:HttpClient 仅在安全策略设置为 tls 1.1 时工作
- javascript - 如何向javascript对象的每个子数组添加一对新的(键,值)?
- android - 非活动课上的科特林吐司
- javascript - Jquery 不通过其 ID 访问表行