php转什么比较容易,为什么PHP的转换和比较比is_ *更快?

PHP中优化功能的同时,我改变了

if(is_array($obj)) foreach($obj as $key=>$value { [snip] }

else if(is_object($obj)) foreach($obj as $key=>$value { [snip] }

if($obj == (array) $obj) foreach($obj as $key=>$value { [snip] }

else if($obj == (obj) $obj) foreach($obj as $key=>$value { [snip] }

在了解了===之后,我改变了

if($obj === (array) $obj) foreach($obj as $key=>$value { [snip] }

else if($obj === (obj) $obj) foreach($obj as $key=>$value { [snip] }

将每个测试从is_ *更改为投影导致重大加速(> 30%).

我明白===比==快,因为没有强制必须完成,但是为什么要调用变量比调用任何一个_ *函数要快得多?

编辑:

由于每个人都询问正确性,我写了这个小测试:

$foo=(object) array('bar'=>'foo');

$bar=array('bar'=>'foo');

if($foo===(array) $foo) echo '$foo is an array?';

if($bar===(object) $bar) echo '$bar is an object?';

它不会打印任何错误,并且两个变量都不会改变,所以我认为它是正常工作,但是我已经准备好相信它.

另一个编辑:

Artefacto的程序给了我以下数字:

PHP 5.3.2-1ubuntu4.2 (64bit) on a Core i5-750 with Xdebug

Elapsed (1): 0.46174287796021 / 0.28902506828308

Elapsed (2): 0.52625703811646 / 0.3072669506073

Elapsed (3): 0.57169318199158 / 0.12708187103271

Elapsed (4): 0.51496887207031 / 0.30524897575378

Speculation: Casting and comparing can be about 1.7-4 times faster.

PHP 5.3.2-1ubuntu4.2 (64bit) on a Core i5-750 without Xdebug

Elapsed (1): 0.15818405151367 / 0.214271068573

Elapsed (2): 0.1531388759613 / 0.25853085517883

Elapsed (3): 0.16164898872375 / 0.074632883071899

Elapsed (4): 0.14408397674561 / 0.25812387466431

Without Xdebug, the extra function call didn't matter anymore, so every test (except 3) ran faster.

PHP 5.3.2-1ubuntu4.2 on a Pentium M 1.6GHz

Elapsed (1): 0.97393798828125 / 0.9062979221344

Elapsed (2): 0.39448714256287 / 0.86932587623596

Elapsed (3): 0.44513893127441 / 0.23662400245667

Elapsed (4): 0.38685202598572 / 0.82854390144348

Speculation: Casting an array is slower, casting an object can be faster, but might not be slower.

PHP 5.2.6-1+lenny8 on a Xeon 5110

Elapsed (1): 0.273758888245 / 0.530702114105

Elapsed (2): 0.276469945908 / 0.605964899063

Elapsed (3): 0.332523107529 / 0.137730836868

Elapsed (4): 0.267735004425 / 0.556323766708

Speculation: These results are similar to Artefacto's results, I think it's PHP 5.2.

解决方案:

我使用的分析器(Xdebug)使函数调用速度慢了3倍(即使没有分析),但并没有影响到转换和比较显着,所以铸造和比较看起来更快,即使它不受调试器/分析器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值