PHP 版本7.2.14中,一个数除以0会发生什么
PHP版本:
1 2 3 4 5
| ~/codeDir/phpCode/test # php -v PHP 7.2.14 (cli) (built: Jan 11 2019 01:35:56) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.14, Copyright (c) 1999-2018, by Zend Technologies
|
代码:
1 2 3 4 5 6
| <?php
$a = 10; $b = 0;
echo $a / $b;
|
执行结果:
1 2 3 4
| ~/codeDir/phpCode/test # php test.php
Warning: Division by zero in /root/codeDir/phpCode/test/test.php on line 6 INF~/codeDir/phpCode/test #
|
我们发现,报了Warning
问题,这是PHP错误的一种等级。说明,就7.2.14
版本的PHP而言:
自然,我们就不可以通过捕获异常的方式来处理除0问题了:
1 2 3 4 5 6 7 8 9 10
| <?php
$a = 10; $b = 0;
try { echo $a / $b; } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL; }
|
结果:
1 2 3 4
| ~/codeDir/phpCode/test # php test.php
Warning: Division by zero in /root/codeDir/phpCode/test/test.php on line 7 INF~/codeDir/phpCode/test #
|
捕获异常失败了对吧。
所以,对于这种情况,我们还是需要单独去判断$b
是否为0。
(注意,这是在目前的PHP版本中,除以0是当作错误来处理,在其他语言例如Java中,是当作异常来处理的)
如果可以的话,能够使用set_error_handler
来接管PHP错误处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
function customError($errno, $errstr) { throw new Exception($errno . '|' . $errstr); }
set_error_handler('customError', E_WARNING | E_STRICT);
$a = 10; $b = 0;
try { echo $a / $b; } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL; }
|
执行结果:
1 2
| ~/codeDir/phpCode/test # php test.php 2|Division by zero
|