PHP 面向对象 final类与final方法


Posted in PHP onMay 05, 2010

final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
final类不能被继承。
如果我们不希望一个类被继承,我们使用final来修饰这个类。这个类将无法被继承。比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型。

<? 
//声明一个final类Math 
final class Math{ 
public static $pi = 3.14; public function __toString(){ 
return "这是Math类。"; 
} 
} 
$math = new Math(); 
echo $math; 
//声明类SuperMath 继承自 Math类 
class SuperMath extends Math { 
} 
//执行会出错,final类不能被继承。 
?>

程序运行结果
Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 14

final方法不能被重写
如果不希望类中的某个方法被子类重写,我们可以设置这个方法为final方法,只需要在这个方法前加上final修饰符。

如果这个方法被子类重写,将会出现错误。

<? 
//声明一个final类Math 
class Math{ 
public static $pi = 3.14; 
public function __toString(){ 
return "这是Math类。"; 
} 
public final function max($a,$b){ 
return $a > $b ? $a : $b ; 
} 
} 
//声明类SuperMath 继承自 Math类 
class SuperMath extends Math { 
public final function max($a,$b){} 
} 
//执行会出错,final方法不能被重写。 ?>

程序运行结果

Fatal error: Class SuperMath may not inherit from final class (Math) in E:\PHPProjects\test.php on line 16
PHP 相关文章推荐
实现“上一页”和“下一页按钮
Oct 09 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
php Calender(日历)代码分享
Jan 03 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
php回调函数处理数组操作示例
Apr 13 PHP
PHP 面向对象 PHP5 中的常量
May 05 #PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 #PHP
一些被忽视的PHP函数(简单整理)
Apr 30 #PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 #PHP
mayfish 数据入库验证代码
Apr 30 #PHP
在PHP中操作Excel实例代码
Apr 29 #PHP
PHP 图片上传实现代码 带详细注释
Apr 29 #PHP
You might like
PHP实时显示输出
2008/10/02 PHP
PHP学习笔记之一
2011/01/17 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
学习jQuey中的return false
2015/12/18 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python FTP操作类代码分享
2014/05/13 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python文件去除注释的方法
2015/05/25 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
新闻学专业个人求职信写作
2014/02/04 职场文书
手工社团活动方案
2014/02/17 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
迟到检讨书范文
2015/01/27 职场文书
超市采购员岗位职责
2015/04/07 职场文书
运动会100米加油稿
2015/07/21 职场文书
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang