PHP中final关键字误区
最近在php理论知识回炉的过程中,发现自己已经步入了不少误区,今天又遇到了一个:
final修饰的类不能被继承,final修饰的方法也不能继承咯——误区。
而实际情况是这样的:
final类不能被继承——正确。
final方法不能被重写——正确。
注意:当final修饰类方法时,该方法可以被继承,而不能被重写!
今天在学习Exception的时候遇到这样的问题,具体代码是这样的:
<?php class MyException extends Exception { } try { throw new MyException('MyException'); } catch(MyException $e) { var_dump($e); echo 'MyException:'.$e->getMessage(); //输出异常信息 }
我定义了一个MyException类继承父类Exception,可是仔细查了一下php手册,竟然发现父类Exception的方法大多是final,然后我就陷入了上面那个误区。
之后,再去仔细查了一下final的介绍,才发现原来final修饰类和修饰方法达到的效果是不一样的。例如我在MyException中添加了一个Exception中的final方法:
<?php class MyException extends Exception { function getMessage() { } } try { throw new MyException('MyException'); } catch(MyException $e) { var_dump($e); echo 'MyException:'.$e->getMessage(); //输出异常信息 }
结果就报错了:Fatal error: Cannot override final method Exception::getMessage()
然后我就放心了,说明多查资料,多写demo来验证还是可以自行解决问题的。
永久地址:http://blog.zhengshuiguang.com/php/php-final.html
转载随意~请带上教程地址吧^^
评论已关闭