这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 PHP 类相关知识点, 结合实例形式总结分析了 php 类相关的最终类、最终方法、抽象类、抽象方法、接口、重载、魔术方法等相关概念与操作技巧, 需要的朋友可以参考下
本文实例总结了 PHP 类相关知识点。分享给大家供大家参考,具体如下:
最终类与最终方法
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
- final class a{}
- class a{
- final public function A(){}
- }
抽象类与抽象方法
- abstract class a {
- public abstract function func();
- }
- class A extends a{
- public function func(){}
- }
① 一个类可以使用 abstract 声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。
- abstract class name {}
② 一个方法可以使用 abstract 声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。
- abstract public function name($val);
③ 一个类中有抽象方法,则该类必须声明为抽象类。
④ 子类继承自一个抽象类,则子类不行实现父类中的所有抽象方法,除非子类也继续作为抽象类。
⑤ 子类实现抽象父类的方法时,访问控制符范围不能降低,且方法的参数也必须一致(重写)。
接口
接口可以看作是抽象类的更高层面的抽象,可以说是抽象类的特例
- interface a {
- function func();
- }
- class A implements a {
- function func() {}
- }
类:属性、类常量、方法
抽象类:属性、类常量、抽象方法
接口:接口常量、抽象方法
① 相比抽象类,接口可实现'多继承'
- class A implements a,b,c{}
② 一个接口只能继承一个接口
- interface a extends b {}
③ 其中方法都是抽象方法不用 abstract 修饰,即下级类要么实现接口的方法(implements),要么也声明为抽象方法
重载技术
1. 属性重载:如果使用一个不存在的属性,就会调用类中预先定义好的某个方法以处理数据;
对于属性不用的应用场景,做如下处理
① 取值:自动调用类中的__get()
② 赋值:自动调用类中的__set()
③ 判断是否存在:自动调用类中的__isset()
④ 销毁:自动调用类中的__unset()
前提是预先定义好这些方法,否则会报错
- <?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));
运行结果如下:
- one not exists
- 1
- boolean true
2. 方法重载:如果使用一个不存在的方法,就会调用类中预先定义好的某个方法以处理该行为;
对于方法不用的应用场景,做如下处理
① 在对象中调用不可访问的方法:__call()
② 静态方式中调用不可访问方法:__callStatic()
- <?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;
- }*/
运行结果如下:
- function func not exist
- function staFunc not exist
注意:以上方法都属于魔术方法,都带有参数
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0805/342392.html