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

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

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

第7章 网络层第3次练习题答案(第三版)

剑指offer专项突击版 ---- 第1天

Interviewer, don't ask me to shake hands three times and wave four times again

11 【组件通信】
![[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

05 【绑定样式 条件渲染 列表渲染】

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

面试Redis 高可靠性|主从模式、哨兵模式、Cluster集群模式
随机推荐
剑指offer基础版 ----- 第25天
剑指offer基础版 ---- 第29天
leetcode-每日一题剑指 Offer II 041. 滑动窗口的平均值(队列模拟)
C语言如何分辨大小端
Interviewer: If the order is not paid within 30 minutes, it will be automatically canceled. How to do this?
C语言实验二 数据类型、运算符和表达式
pytorch中的一维、二维、三维卷积操作
PAT_乙级_真题练习_1007_素数对猜想
find、filter、map的区别
运用flask框架发送短信验证码的流程及具体代码
C语言指针详解
字符串的扩展
wpf ScrowViewer水平滚动
面试Redis 高可靠性|主从模式、哨兵模式、Cluster集群模式
数据库上机实验4 数据更新和视图
tf.keras.utils.pad_sequences()
10 【高度塌陷与BFC】
MySQL (updating)
剑指offer专项突击版 --- 第 4 天
leetcode-每日一题735. 行星碰撞(栈模拟)