php面向对象(三),抽象类,抽象方法,接口及php的”重载“
2016-02-15 11:52
627 查看
抽象类
定义:一个抽象的不能被实例化的类。
定义形式(
抽象方法
定义:一个只有方法头,没有方法体的方法
定义形式(用
抽象类和抽象方法的细节:
一个抽象方法必须在抽象类中,即方法为抽象的,那么其所在的类也不是是抽象的;
抽象类中可以没有抽象方法;
子类继承了父类,那么要么实现(“重写”)父类的抽象方法,要么在次定义为抽象的。
重载
含义:在“通常面向对象语言”中是指一个类可以名字相同但形参不同的方法的现象(如
如:
php中的重载
含义:是指当对一个对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”。
属性重载:
含义:对一个对象的不存在的属性进行使用的时候,这个类种预先设定好的应对方法(处理机制)
属性,本质就是一个变量,其有4个操作:
取值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:
赋值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:
判断(isset):当对一个对象的不存在的属性进行“判断”的时候,就会自动调用方法:
判断(isset):当对一个对象的不存在的属性进行“判断”的时候,就会自动调用方法:
__set($属性名,值):
含义:当对一个对象的不存在属性进行“赋值”的时候就会自动调用这个内部的魔术方法,它有两个形参,分别代表对不存在的属性进行赋值的时候的“属性名”和“属性值”。
这个方法结合
__isset()
含义:当对一个对象的不存在属性进行“判断”的时候就会自动调用这个内部的魔术方法。
__unset()
含义:当对一个对象的不存在属性进行“销毁”的时候就会自动调用这个内部的魔术方法。
方法重载
当对一个对象的不存在的实例方法进行“调用”的时候会自动调用类中的
当对一个对象的不存在的静态方法进行“调用”的时候会自动调用类中的
php中实现通常的面向对象语言的“方法重载”(利用
接口
定义形式
说明:
接口中只有常量(接口常量)和抽象方法两种成员;
接口常量的使用形式为:
接口中的抽象方法,不要使用
还谈php和java面向对象
相同点:
抽象类和抽象方法,及它们之间的细节都一样;
php的接口和java的接口都一样。
不同点:
重载不一样,php重载和其他面向对象语言的重载不同,而java和其他面向对对象语言的重载一样。
定义:一个抽象的不能被实例化的类。
定义形式(
abstract关键字):
[code]abstract class 类名{ // ... }
抽象方法
定义:一个只有方法头,没有方法体的方法
定义形式(用
abstract修饰方法)
[code]abstract class 类名{ abstract function 方法名(形参列表); // 没有方法体,结尾分号不能省略 }
抽象类和抽象方法的细节:
一个抽象方法必须在抽象类中,即方法为抽象的,那么其所在的类也不是是抽象的;
抽象类中可以没有抽象方法;
子类继承了父类,那么要么实现(“重写”)父类的抽象方法,要么在次定义为抽象的。
重载
含义:在“通常面向对象语言”中是指一个类可以名字相同但形参不同的方法的现象(如
java)。
如:
[code]class A{ function f(){ } function f($a){ } function f($a,$b){ } }
php中的重载
含义:是指当对一个对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”。
属性重载:
含义:对一个对象的不存在的属性进行使用的时候,这个类种预先设定好的应对方法(处理机制)
属性,本质就是一个变量,其有4个操作:
取值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:
__get();
赋值:当对一个对象的不存在的属性进行“取值”的时候,就会自动调用方法:
__set();
判断(isset):当对一个对象的不存在的属性进行“判断”的时候,就会自动调用方法:
__isset();
判断(isset):当对一个对象的不存在的属性进行“判断”的时候,就会自动调用方法:
__unset()。
__set($属性名,值):
含义:当对一个对象的不存在属性进行“赋值”的时候就会自动调用这个内部的魔术方法,它有两个形参,分别代表对不存在的属性进行赋值的时候的“属性名”和“属性值”。
这个方法结合
__get()方法,往往可以使我们定义的类,就有一种“可简便扩展属性”的特性,即类(或对象)的属性,可以更为方便自由,如下所示:
[code]class A{ protected $prop_list = array(); function __set($p,$v){ $this->prop_list[$p] = $v; } function __get($p){ return $this->prop_list[$p]; } }
__isset()
含义:当对一个对象的不存在属性进行“判断”的时候就会自动调用这个内部的魔术方法。
__unset()
含义:当对一个对象的不存在属性进行“销毁”的时候就会自动调用这个内部的魔术方法。
方法重载
当对一个对象的不存在的实例方法进行“调用”的时候会自动调用类中的
__call()这个魔术方法;
当对一个对象的不存在的静态方法进行“调用”的时候会自动调用类中的
__callstatic()这个魔术方法。
php中实现通常的面向对象语言的“方法重载”(利用
__call()和
__callstatic()方法),如:
[code]<?php class A{ function __call($methodName,$arguments){ switch ($methodName) { case 'f1': // 调用了f1这个不存在的方法 # 调用了方法名为f1的这一系列重载方法 if(count($arguments) == 0){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 1){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 2){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 3){ // 这里拿这些参数做这个方法的事情... } // ... break; case 'f2': // 调用了f2这个不存在的方法 # 调用了方法名为f2的这一系列重载方法 if(count($arguments) == 0){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 1){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 2){ // 这里拿这些参数做这个方法的事情... }else if(count($arguments) == 3){ // 这里拿这些参数做这个方法的事情... } // ... break; default: break; } } } ?>
接口
定义形式
[code]interface 接口名{ 常量1; 常量2; ... 抽象方法1; 抽象方法2; ... }
说明:
接口中只有常量(接口常量)和抽象方法两种成员;
接口常量的使用形式为:
接口名称::常量名称;
接口中的抽象方法,不要使用
abstract修饰,也需要使用访问控制修饰符,因为其天然就是
Public;
php中接口和类一样也可以继承(接口继承接口)。
还谈php和java面向对象
相同点:
抽象类和抽象方法,及它们之间的细节都一样;
php的接口和java的接口都一样。
不同点:
重载不一样,php重载和其他面向对象语言的重载不同,而java和其他面向对对象语言的重载一样。
相关文章推荐
- PHP时间戳 strtotime()使用方法和技巧
- phpwind < v6 版本命令执行漏洞
- PHP导入导出excel表格图片的代码和方法大全
- php随机函数
- ftp命令行下,为什么不能上传目录?
- PHP的try catch
- php常见问题
- 使用 matplotlib 绘制文氏图(venn)
- php 获取汉字拼音首字母的函数
- PHP字符串截取操作大全
- PHP异步请求
- ECshop 迁移到 PHP7版本时遇到的兼容性问题
- PHP扩展迁移为PHP7扩展兼容性问题记录
- PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
- php 总结
- 解决phpMyAdmin最大限制
- PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
- PHP扩展迁移为PHP7扩展兼容性问题记录
- ECshop 迁移到 PHP7版本时遇到的兼容性问题
- ThinkPHP设置禁止百度等搜索引擎转码(简单实用)