当前位置:网站首页>PHP中abstract(抽象)、final(最终)和static(静态)原理与用法
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法
2022-07-31 05:10:00 【?vsVSvs??】
1.abstract(抽象)
定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
特点:
- 类中有任何抽象方法那这个类也必须为抽象的;
- 抽象类只能申明调用方式和参数,不能定义具体功能实现;
- 继承抽象类的子类必须实现抽象类的所有抽象方法;
- 子类中实现的抽象方法的访问控制必须比父类的访问控制更严格;
- 子类中实现的方法的调用方式及参数数量必须与被实现的方法一致。
代码示例:
#抽象类
abstract class Table{
#强制子类定义这个方法
abstract public function create($table);
#普通方法 子类不要重新写 直接继承
public function select(){
echo '查询';
}
}
class member extends Table{
#必需定义该方法 但是参数可以定义一些 父类不存在的参数 作为可选参数
public function create($table,$name=''){
echo '创建:'.$table.'&name='.$name;
}
}
$member = new member();
$member->create('member','id');#创建:member&name=id
$member->select();#查询
2.final(最终)
它可以在类或类中成员方法前使用,但是不能用来修饰成员属性。如果某个类不想被继承,那么就可以使用 final 来修饰这个类。使用 final 修饰的类不能有子类,也就不能对它进行拓展。
特点:
- 使用 final
修饰的类,不能被继承;
- 类中使用 final
修饰的成员方法,在子类中不能覆盖(重写)该方法;
定义类:
代码示例:
# 定义一个不能被继承的类
final class test{
}
#去继承上面这个类
class test1 extends test{
}
报错提示:
PHP Fatal error: Class test1 may not inherit from final class (test)
定义方法:
代码示例:
# 定义一个不能被继承的类
class test{
final public function add(){
echo '我不想被继承';
}
}
#去继承上面这个类
class test1 extends test{
public function add(){
echo '我重新定义一下这个方法';
}
}
报错提示:
PHP Fatal error: Cannot override final method test::add()
3.static(静态)
用来定义累的静态属性或方法,可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
注意:
1.静态方法内部禁止出现非静态内容!
2.在静态方法中,只能调用静态变量,不能调用普通变量;而普通方法则可以调用静态变量。
class ceshi{
static public $num =0;
public static function add(){
self::$num = self::$num +1;
echo self::$num;
}
public function addNum(){
self::$num = self::$num +1;
echo self::$num;
}
}
$ceshi = new ceshi();
$ceshi::add();//1
$ceshi->addNum();//2
总结:静态成员不用实例化对象,当类第一次被加载时就已经分配了内存空间,所以直接调用静态成员的速度要更快一些。但如果静态成员声明得过多,空间一直被占用,反而影响系统的运行速度。
边栏推荐
- Flink sink ES 写入 ES(带密码)
- gin框架学习-Gin框架和Gorm框架搭建一个简单的API微服务
- Anaconda配置环境指令
- 面试官,不要再问我三次握手和四次挥手
- 11 【定位】
- The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
- leetcode-每日一题745. 前缀和后缀搜索(哈希和字典树)
- [Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade
- 02 【el和data的两种写法 MVVM模型】
- 数据库上机实验7 数据库设计
猜你喜欢
随机推荐
面试官,不要再问我三次握手和四次挥手
11 【组件通信】
Paginate the list collection and display the data on the page
第7章 网络层第1次练习题答案(第三版)
分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
Why use Flink and how to get started with Flink?
Input length must be multiple of 8 when decrypting with padded cipher
C语言如何分辨大小端
05 【绑定样式 条件渲染 列表渲染】
[MQ I can speak for an hour]
C语言教程(三)-if和循环
leetcode-每日一题剑指 Offer II 041. 滑动窗口的平均值(队列模拟)
leetcode-每日一题745. 前缀和后缀搜索(哈希和字典树)
12 【网页布局总结 元素的显示与隐藏】
07 【内置指令 自定义指令】
numpy和pytorch中的元素拼接操作:stack,concatenat,cat
对list集合进行分页,并将数据显示在页面中
实验7 UDP与TCP对比
The TOKEN value of Kubernetes joining the cluster expires
The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays