本文实例总结了PHP类相关知识点。分享给大家供大家参考,具体如下:
最终类与最终方法
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
1
2
3
4
|
final class a{} class a{ final public function A(){} } |
抽象类与抽象方法
1
2
3
4
5
6
|
abstract class a { public abstract function func(); } class A extends a{ public function func(){} } |
① 一个类可以使用abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。
1
|
abstract class name{} |
② 一个方法可以使用abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。
1
|
abstract public function name( $val ); |
③ 一个类中有抽象方法,则该类必须声明为抽象类。
④ 子类继承自一个抽象类,则子类不行实现父类中的所有抽象方法,除非子类也继续作为抽象类。
⑤ 子类实现抽象父类的方法时,访问控制符范围不能降低,且方法的参数也必须一致(重写)。
接口
接口可以看作是抽象类的更高层面的抽象,可以说是抽象类的特例
1
2
3
4
5
6
|
interface a{ function func(); } class A implements a { function func(){} } |
类:属性、类常量、方法
抽象类:属性、类常量、抽象方法
接口:接口常量、抽象方法
① 相比抽象类,接口可实现‘多继承'
1
|
class A implements a,b,c{} |
② 一个接口只能继承一个接口
1
|
interface a extends b{} |
③ 其中方法都是抽象方法不用abstract修饰,即下级类要么实现接口的方法(implements),要么也声明为抽象方法
重载技术
1. 属性重载:如果使用一个不存在的属性,就会调用类中预先定义好的某个方法以处理数据;
对于属性不用的应用场景,做如下处理
① 取值:自动调用类中的__get()
② 赋值:自动调用类中的__set()
③ 判断是否存在:自动调用类中的__isset()
④ 销毁:自动调用类中的__unset()
前提是预先定义好这些方法,否则会报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php class bee{ public $ol = array (); public function __get( $key ){ if (isset( $this ->ol[ $key ])){ return $this ->ol[ $key ]; } return $key . ' not exists' ; } public function __set( $key , $val ){ $this ->ol[ $key ] = $val ; } public function __isset( $key ){ if (isset( $this ->ol[ $key ])){ return true; } return false; } public function __unset( $key ){ unset( $this ->ol[ $key ]); } } $obj = new bee(); echo $obj ->one; echo '<br>' ; $obj ->one = 1; echo $obj ->one; echo '<br>' ; var_dump(isset( $obj ->one)); |
运行结果如下:
1
2
3
|
one not exists 1 boolean true |
2. 方法重载:如果使用一个不存在的方法,就会调用类中预先定义好的某个方法以处理该行为;
对于方法不用的应用场景,做如下处理
① 在对象中调用不可访问的方法:__call()
② 静态方式中调用不可访问方法:__callStatic()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<?php class bee{ public function __call( $name , $arr ){ echo '<br>' ; echo 'function ' . $name . ' not exist' ; } static function __callStatic( $name , $arr ){ echo '<br>' ; echo 'function ' . $name . ' not exist' ; } /*public function __call($name,$arr){ $num = count($arr); if($num<1){ $name(); }else{ $name = $name.'_one'; $name($arr[0]); } }*/ } $obj ->func(); bee::staFunc(); /*$obj->func(1); function func(){ echo '<br>'; echo 'no.0'; } function func_one($val){ echo '<br>'; echo 'no.'.$val; }*/ |
运行结果如下:
1
2
|
function func not exist function staFunc not exist |
注意:以上方法都属于魔术方法,都带有参数
希望本文所述对大家PHP程序设计有所帮助。