PHP面向对象编程(imooc)代码合集(四)
class10 多态
多态简单说就是用不同的类去实现同一个接口的方法,以实现不同类自己的方法
<?php date_default_timezone_set("PRC"); /*** 多态* 1. 只要某个对象实现了接口(instanceof),就可以直接在对象上调用接口的方法*/interface ICanEat {public function eat($food); }// Human类实现了ICanEat接口 class Human implements ICanEat { // 跟Animal类的实现是不同的public function eat($food){echo "Human eating " . $food . "\n";} }// Animal类实现了ICanEat接口 class Animal implements ICanEat {public function eat($food){echo "Animal eating " . $food . "\n";} }function eat($obj){if($obj instanceof ICanEat){ $obj->eat("FOOD"); // 不需要知道到底是Human还是Animal,直接吃就行了}else{echo "Can't eat!\n";} }$man = new Human(); $monkey = new Animal();// 同样的代码,传入接口的不同实现类的时候,表现不同。这就是为什么成为多态的原因。 eat($man); eat($monkey);?>
class11 抽象类
抽象类是介于接口和一般类之间的一个类,它允许自身的某些方法暂时没有具体实现;但是,抽象类和接口一样,不能直接实例化为对象,必须要一个一般类去继承它,它只能作为父类被使用
<?php date_default_timezone_set("PRC"); /*** 抽象类* 1. 抽象类允许类里面的部分方法暂时没有具体实现,这些方法我们成为抽象方法* 2. 一旦类里面有抽象方法,这个类就必须是抽象类* 3. 抽象类跟接口一样,不能直接实例化为对象*/// 抽象类前面以abstract关键字开始 abstract class ACanEat {// 没有实现的方法需要设定为抽象方法// 抽象方法需要在子类中实现 abstract public function eat($food);public function breath(){echo "Breath use the air.\n";} }// Human类实现了ICanEat接口 class Human extends ACanEat { // 跟Animal类的实现是不同的public function eat($food){echo "Human eating " . $food . "\n";} }// Animal类实现了ICanEat接口 class Animal extends ACanEat {public function eat($food){echo "Animal eating " . $food . "\n";} }$man = new Human(); $man->eat("Apple"); $man->breath(); // 和Animal共用了抽象类ICanEat的breath方法 $monkey = new Animal(); $monkey->eat("Banana"); $monkey->breath();?>
这只后给大家简单介绍一下PHP中特有的一些方法(PHP特性),他们分别是
__tostring()--能使对象当做String直接调用 __invoke() --能使对象被当成方法被自动调用
class12
__tostring()--能使对象当做String直接调用 __invoke() --能使对象被当成方法被自动调用
<?php date_default_timezone_set("PRC"); /*** 魔术方法1* 1. 当对象被当做String使用时,__tostring()会被自动调用* 2. 当对象被当成方法调用时,__invoke()会被自动调用*/ class MagicTest{public function __tostring(){return "This is the Class MagicTest.\n";}public function __invoke($x){echo "__invoke called with parameter " . $x . "\n";} }$obj = new MagicTest(); echo $obj; $obj(5); //直接在对象中传入参数5,它会被__invoke()函数接收?>
class13
1. 当对象访问不存在的方法名称时,__call()方法会被自动调用2. 当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用
<?php date_default_timezone_set("PRC"); /*** 魔术方法2之方法重载* 1. 当对象访问不存在的方法名称时,__call()方法会被自动调用* 2. 当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用*/ class MagicTest{public function __tostring(){return "This is the Class MagicTest.\n";}public function __invoke($x){echo "__invoke called with parameter " . $x . "\n";}public function __call($name, $arguments){echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n";}public static function __callStatic($name, $arguments){echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n";} }$obj = new MagicTest(); $obj->runTest("para1", "para2"); MagicTest::runTest("para3","para4");?>
class14
__set()
__get()
isset()
empty()
unset()
__unset()
<?php date_default_timezone_set("PRC"); /*** 魔术方法3之属性重载* 1. 在给不可访问属性赋值时,__set() 会被调用。* 2. 读取不可访问属性的值时,__get() 会被调用。* 3. 当对不可访问属性调用 isset() 和empty()时,__isset() 会被调用。* 4. 当对不可访问属性调用 unset() 时,__unset() 会被调用*/ class MagicTest{public function __tostring(){return "This is the Class MagicTest.\n";}public function __invoke($x){echo "__invoke called with parameter " . $x . "\n";}public function __call($name, $arguments){echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n";}public static function __callStatic($name, $arguments){echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n";}// 通过这两个方法可以实现动态的对象属性public function __get($name){return "Getting the property " . $name;}public function __set($name, $value){echo "Setting the property " . $name . " to value ". $value. "\n";}public function __isset($name){echo "__isset invoked\n";return false;}public function __unset($name){echo "unsetting property " . $name;} }$obj = new MagicTest(); echo $obj->name . "\n"; $obj->name = "Name Value"; echo '$obj->name is set? '. isset($obj->name) . "\n"; echo '$obj->name is empty?' . empty($obj->name) . "\n"; unset($obj->name); ?>
后边几个魔术方法,具体在什么时候调用呢?
我觉得是用于容错处理的。
转载于:https://www.cnblogs.com/construtora/p/5021302.html
PHP面向对象编程(imooc)代码合集(四)相关推荐
- GitHub上7000+ Star的Python常用代码合集
作者 | 二胖并不胖 来源 | 大数据前沿(ID:bigdataqianyan) 今天二胖给大家介绍一个由一个国外小哥用好几年时间维护的Python代码合集.简单来说就是,这个程序员小哥在几年前开始保 ...
- 收藏 | 因果推断书籍代码合集
来源:计量经济学服务中心本文约2700字,建议阅读8分钟 本文为你介绍了因果推断书籍的代码合集. 1.Causal Inference: The Mixtape 来源: https://mixtape ...
- 2013计算机视觉代码合集
注:下面有project网站的大部分都有paper和相应的code.Code一般是C/C++或者Matlab代码. 最近一次更新:2013-9-7 一.特征提取Feature Extraction: ...
- 预编码 matlab,无线通信-预编码-MATLAB代码合集
无线通信-预编码-MATLAB代码合集 c 2021-2-18 下载地址 https://www.codedown123.com/72422.html 多用户MIMO预编码之类的代码,帮助初学者进行编 ...
- python画心形代码大全_Python代码合集看点 机器人算法、自动导航算法算法大全...
导读:本文包含机器人算法.自动导航算法的Python代码合集.其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少.容易阅读,容易理解每个算法的基本思想.希望阅读本文后能对你有所帮助.文章来源 ...
- 一、PyTorch Cookbook(常用代码合集)
PyTorch Cookbook(常用代码合集) 原文链接:https://mp.weixin.qq.com/s/7at6y2NcYaxGGN8syxlccA 谢谢作者的付出.
- apicloud ajax html,基于apicloudAJAX请求代码合集
get请求代码: api.ajax({ url:'http://m.weather.com.cn/data/101010100.html' //天气预报网站的WebService接口 },functi ...
- 【CV】YOLOv4最全复现代码合集(含PyTorch/TF/Keras和Caffe等)
前言 2020年4月24日,CVer第一时间推文:大神接棒,YOLOv4来了! 2020年6月28日,CVer第一时间推文:YOLOv4-Tiny来了!371 FPS! 距离YOLOv4正式推出,已经 ...
- YOLOv3最全复现代码合集(含PyTorch/TensorFlow和Keras等)
点击上方"CVer",选择"置顶公众号" 重磅干货,第一时间送达 前戏 2018年3月26日,CVer第一时间推文:YOLOv3:你一定不能错过 2019年3月 ...
- js时间戳(代码合集)获取(年月日,秒戳,毫秒戳,) - 综合篇
js时间戳(代码合集)获取(年月日,秒戳,毫秒戳,) - 综合篇 官方解说:JavaScript Date 对象 W3CSchool教程: JavaScript Date 对象 一.js获取北京时间 ...
最新文章
- Netflix海外市场交到好运 用户数量猛增
- 使用思科3640实现不同网段通讯
- matlab矩阵分解
- python中color的用法_python - 如何为热图(使用plt.pcolor创建)中的NaN单元分配特定的颜色或图案,并使其显示在颜色栏中(图colorbar) - 堆栈内存溢出...
- Python:list 和 array的对比以及转换时的注意事项
- 在Linux环境下使用Apache部署ASP.NET Core
- 重设MYSQL数据库ROOT用户的密码
- 手把手搭建一个容器化+代理网关+可视化管理环境
- 国外PHP学习网站书籍资料汇总
- linux samba教程,Linux samba的配置和使用
- C# struct 性能损失
- 微课有关计算机应用基础,【计算机仿真论文】微课在计算机应用基础课的应用(共3802字)...
- python的pyqt5教程_python PyQt5初级教程hello world
- InDesign(拼合预设转曲)
- 管家婆软件显示服务器连接失败,管家婆软件提示“连接服务器失败”怎么办
- 【简介】请使用中国原子能科学研究院学位论文Latex模板
- 我的世界1.12.2java下载_我的世界Minecraft Java版1.12.2 pre2 宣布
- C#中invoke和beginInvoke
- 戴尔台式计算机怎么安装的,戴尔台式机重装系统教程
- PHP实现页面静态化、纯静态化及伪静态化
热门文章
- xp启动java设置_Windows XP快速启动经典六招
- python中where函数_如何在python中基于Where函数获取两列值
- 一个小型网站多少台服务器,小型企业局域网需要服务器的价格在多少左右(40台机器)...
- 计算机三级四级机考,2017年全国计算机等级考试四级上机编程试题一
- php基础 简书,php基础
- 工业机器视觉系统相机如何选型?(理论篇—3)
- 【lidar】基于YOLO的3D目标检测(激光雷达点云)课程设计
- xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方法
- des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...
- python 去除str的引号 去除括号_Python基础教程:运算符以及数据类型解析