从性能的角度来看,我应该选择:
$className = 'Foobar';
$methodName = 'method';
此
$Reflected = new ReflectionClass($className);
$result = $Reflected->hasMethod($methodName);
在
$result = method_exists($className,$method);
为什么?
对于这种情况,我没有使用ReflectionClass的任何其他属性或方法。
答案 0 :(得分:11)
我用1,000,000个循环测量它。它可能不具代表性。
需要21秒:
$reflector = new ReflectionClass($module);
$reflector->hasMethod('getDecryptedId'))
需要1.2秒:
method_exists($module, 'getDecryptedId')
所以 method_exists快17.5倍。如果你大量使用它,这只是间歇性的。
答案 1 :(得分:0)
我测量了一些不同的指标:
我在2015 MBP上做了500,000次循环,结果非常相似。
method_exists
大概是3.4 - 3.5秒hasMethod
约为3.7 - 3.8秒因此,根据方法的位置/存在,差异不大,反射稍慢,为8%。
如果我需要更多信息反映将是可行的方法,但对于简单的检查,method_exists
有优势。