首页 > PHP > PHP中final关键字误区

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

转载随意~请带上教程地址吧^^

标签:final 修饰类 修饰方法

评论已关闭