当前位置:网站首页>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
总结:静态成员不用实例化对象,当类第一次被加载时就已经分配了内存空间,所以直接调用静态成员的速度要更快一些。但如果静态成员声明得过多,空间一直被占用,反而影响系统的运行速度。
边栏推荐
猜你喜欢

Distributed transaction processing solution big PK!

剑指offer基础版 ---- 第26天

【C语言趣味小游戏——猜数字】

07 【内置指令 自定义指令】

leetcode-每日一题731. 我的日程安排表 II

【C语言3个基本结构详解——顺序、选择、循环】

剑指offer基础版 --- 第24天
![[Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade](/img/af/7a2cdcc6535c04c508c9ddf9ee0cb2.png)
[Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade

16 【打包上线 图片懒加载】

Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
随机推荐
gin框架学习-Casbin入门指南(ACL、RBAC、域内RBAC模型)
Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
gin框架学习-JWT认证
Kubernetes certificate validity period modification
账号或密码多次输入错误,进行账号封禁
11 【组件通信】
Why use Flink and how to get started with Flink?
tf.keras.utils.get_file()
Sword Point Offer Special Assault Edition ---- Day 2
leetcode-每日一题565. 数组嵌套(标记图和并查集)
Refinement of the four major collection frameworks: Summary of List core knowledge
分布式事务处理方案大 PK!
Paginate the list collection and display the data on the page
Swordsman Offer Special Assault Edition ---- Day 6
【数据库学习】Redis 解析器&&单线程&&模型
[Introduction to MySQL 8 to Mastery] Basics - silent installation of MySQL on Linux system, cross-version upgrade
uni-app进阶之认证【day12】
The interviewer asked me TCP three handshake and four wave, I really
10 【高度塌陷与BFC】
[MQ I can speak for an hour]