1. final的介绍
final可以用来修饰类和方法,当修饰类的时候,该类不能被继承,当修饰方法的时候,该方法不能被覆盖。final具有以下特性:final用于声明方法和类,分别表示方法不可被覆盖、类不可被继承(不能再派生出新的子类)。final方法:当一个方法被声明为final时,不允许任何子类重写这个方法,但子类仍然可以使用这个方法。需要主要的是,final不能修饰类的成员变量。final类:当一个类被声明为final时,此类不能被继承,所有方法都不能被重写。需要注意的是,一个类既不能被声明为abstract,又被声明为final。
<?phpclass Test {final public function index() {echo 'I'm Test::index';}}class Home extends Test {public function index(){echo 'I'm Home::test1';}}$home = new Home();$home->index();
以上代码运行会报Fatal error: Cannot override final method Test::index() in ...,如果你的编辑器支持语法检测,在编辑的时候也会报错的。
<?phpfinal class Test {}class Home extends Test {}$home = new Home();$home->index();
以上代码运行也会报错Fatal erro']r: Cannot override final method Test::index() in ...;
简单来说,final 定义的东西是不可修改的,一般防止父类的方法被重写而使用。
2. finally的介绍
在php5.5中新增了finally模块,它只能用在try/catch语句中,作为异常处理的一部分,附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下。
try {} catch (Exception $e){// 异常处理} finally {}
finally块中代码的执行不受 try 和 catch 中 return 的影响,当碰到 return 的时候,会先执行finally中的代码,再返回 return 的值。
<?phpfunction test(){try{return 1111;} catch (Exception $e){// 异常处理} finally {echo "I'm finally\n";return 2222;}}echo test();
以上代码会返回
I'm finally2222
