final英文解释:最后的;(指结果)最终的;决定性的;不可改变的。
顾名思义final关键在在php面向对象中也是一个定义方法的关键词,一旦使用final关键词进行定义之后,被定义的方法就无法被继承或者在下面添加子类。
注意:该方法无法定义属性
实例:
<?php
// 第一种:finnal用于方法 【成功输出】
class _final{
public $name = 0;
final public function _final_s(){
echo $this->name;
}
}
$_final = new _final();
$_final -> _final_s(); //输出1;
echo '<hr>';
// 第二种:finnal用于类 【成功输出】
final class _final1{
public $name = 1;
public function _final1_s(){
echo $this->name;
}
}
$_final1 = new _final1();
$_final1 -> _final1_s();//输出1
echo '<hr>';
//第三种:final用于属性 【输出失败】
class _final2{
//public final $name = 2; //打开这
public function _final3_s(){
echo $this->name;
}
}
$_final2 = new _final2();
//$_final2 -> _final2_s(); //再打开这里,就可以看到报了一个Fatal error致命错误,final无法定义属性
echo '<hr>';
//第四种:子类继承含有final修饰词的类 【输出失败】
final class _final3
{
public $name = 3;
public function _final3_s()
{
echo $this->name;
}
}
//class _final3_son extends _final3
//{
// public function _final3_sons()
// {
// parent::_final3_s();
// }
//}
//$final3_son = new _final3_son();
//$final3_son -> _final3_sons(); //打开前面的注释,可以看到报了一个Fatal error致命错误,不可以继承使用了final修饰词的类
echo '<hr>';
//第五种:子类调用类下面含有final修饰词的方法 【成功输出】
class _final4{
public $name = '4';
final public function _final4_s(){
echo $this->name;
}
}
class _final4_son extends _final4{
public function _final4_son_s(){
$this->_final4_s();
}
}
$_final4 = new _final4_son();
$_final4 -> _final4_son_s();//输出结果4运行结果
上述实例,我们演示了final的几种使用方式,其中使用final修饰词定义的类以及方法,是可以被成功调用的。
但是子类是没有办法去继承以及修改父类的,还有就是final修饰词只能用于类或者方法,不能用作属性,否则也会报错。
最后一点,如果说类没有被定义final修饰词,方法被定义了final修饰词,子类是可以成功调用被final定义的方法的。





还没有评论,来说两句吧...