写过一段时间的PHP代码的都可能会感觉自己在开发过程中基本没用过PHP中的异常,我也一样。最近,类比了一下Java中的一些写法以后,发现PHP在代码报错方面和其他的语言有很大的区别。首先,当出现文法错误以后,Java会报异常,而PHP绝大多数情况下会报错误。既然如此,那么PHP中的异常是来干嘛的那?PHP中的错误和异常的区别在哪那?这里就总结一下。
(1):当PHP中出现自身错误以后,绝大多数情况下,会抛出一个错误,并不会抛出一个异常。在少数情况下,会同时抛出一个错误和一个异常。也就是说PHP中有错误和异常两种错误报告形式。Java等语言针对自身错误,只会抛出异常,也就说java中只有异常一种错误报告形式。这也就说明了,PHP针对错误的设计理念和Java等其他语言是不一样的。想要像Java语言一样,通过异常来处理代码逻辑中不可预料的情况,通常来说是办不到的。看下面的代码:
<?php $f = fopen("./test.txt","r"); //./test.txt是不存在,此时php会抛出一个错误,并不会抛出一个异常 ?>
(2):上面已经说了,PHP绝大情况下并不会主动的抛出异常,但是我们可以自己手动的抛出异常,并进行异常的捕捉。也就是说,如果我们不主动的手动抛出异常,我们也就捕捉不到异常。(手动抛出异常才能捕捉异常的形式和”异常”的思想是背道而驶的)。看下面代码,我们必须自己做检测,发现异常情况以后,手动抛出异常,而不能像java一样,由java解释器自动的来处理。
<?php try{ $num_one = 7; $num_two = 0; if($num_two == 0){ //抛出一个异常 throw new Exception("num_two不能为0"); } }catch(Exception $e){ echo $e->getMessage(); } ?>
java中拥有很多的内置异常,当代码出现问题了,java编译器可以主动的抛出异常进行处理。java程序员只需要考虑异常的捕捉以及发生异常后的补救措施。而php程序员需要不断的使用if else 进行数据的判断,手动的抛出异常,再进行处理。