1. final的介绍
final
可以用来修饰类和方法,当修饰类的时候,该类不能被继承,当修饰方法的时候,该方法不能被覆盖。final具有以下特性:final
用于声明方法和类,分别表示方法不可被覆盖、类不可被继承(不能再派生出新的子类)。final
方法:当一个方法被声明为final时,不允许任何子类重写这个方法,但子类仍然可以使用这个方法。需要主要的是,final不能修饰类的成员变量。final
类:当一个类被声明为final时,此类不能被继承,所有方法都不能被重写。需要注意的是,一个类既不能被声明为abstract,又被声明为final。
<?php
class 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 ...
,如果你的编辑器支持语法检测,在编辑的时候也会报错的。
<?php
final 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 的值。
<?php
function test(){
try{
return 1111;
} catch (Exception $e){
// 异常处理
} finally {
echo "I'm finally\n";
return 2222;
}
}
echo test();
以上代码会返回
I'm finally
2222