php try catch 作用域,在PHP中try-catch的性能

尝试捕获块不是性能问题-真正的性能瓶颈来自创建异常对象。

测试代码:

function shuffle_assoc($array) {

$keys = array_keys($array);

shuffle($keys);

return array_merge(array_flip($keys), $array);

}

$c_e = new Exception('n');

function no_try($a, $b) {

$a = new stdclass;

return $a;

}

function no_except($a, $b) {

try {

$a = new Exception('k');

} catch (Exception $e) {

return $a + $b;

}

return $a;

}

function except($a, $b) {

try {

throw new Exception('k');

} catch (Exception $e) {

return $a + $b;

}

return $a;

}

function constant_except($a, $b) {

global $c_e;

try {

throw $c_e;

} catch (Exception $e) {

return $a + $b;

}

return $a;

}

$tests = array(

'no try with no surrounding try'=>function() {

no_try(5, 7);

},

'no try with surrounding try'=>function() {

try {

no_try(5, 7);

} catch (Exception $e) {}

},

'no except with no surrounding try'=>function() {

no_except(5, 7);

},

'no except with surrounding try'=>function() {

try {

no_except(5, 7);

} catch (Exception $e) {}

},

'except with no surrounding try'=>function() {

except(5, 7);

},

'except with surrounding try'=>function() {

try {

except(5, 7);

} catch (Exception $e) {}

},

'constant except with no surrounding try'=>function() {

constant_except(5, 7);

},

'constant except with surrounding try'=>function() {

try {

constant_except(5, 7);

} catch (Exception $e) {}

},

);

$tests = shuffle_assoc($tests);

foreach($tests as $k=>$f) {

echo $k;

$start = microtime(true);

for ($i = 0; $i < 1000000; ++$i) {

$f();

}

echo ' = '.number_format((microtime(true) - $start), 4)."
\n";

}

结果:

no try with no surrounding try = 0.5130

no try with surrounding try = 0.5665

no except with no surrounding try = 3.6469

no except with surrounding try = 3.6979

except with no surrounding try = 3.8729

except with surrounding try = 3.8978

constant except with no surrounding try = 0.5741

constant except with surrounding try = 0.6234

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值