高级OOP特性(6)
PHP不支持的高级OPP特性
PHP不支持通过函数重载实现多态
PHP不支持多重继承
PHP不支持根据所修改数据类型为操作符赋予新的含义
对象克隆
- 克隆实例
在对象前面添加clone关键字来克隆对象,对象的属性值都被继承,克隆的对象还可以重新为原对象赋值
class xiu { private $name; //为$name定义一个设置方法和获取方法 function getName(){ return $this -> name; } function setName($name){ $this -> name = $name; } } $xiu = new xiu(); $xiu -> setName("user"); //用clone克隆$xiu对象 $xiu2 = clone $xiu; $xiu2 -> setName("kang"); echo $xiu -> getName();//输出user echo $xiu2 -> getName();//输出kang
- __clone()方法
__clone()方法在克隆操作其中执行
class xiu { private $name; //为$name定义一个设置方法和获取方法 function getName(){ return $this -> name; } function setName($name){ $this -> name = $name; } function __clone() { $this -> name = "sear"; } } $xiu = new xiu(); $xiu -> setName("user"); //用clone克隆$xiu对象 $xiu2 = clone $xiu; echo $xiu -> getName();//输出user echo $xiu2 -> getName();//输出sear
继承
- 类继承
类继承通过关键字extends实现
下面的列子是kang类继承xiu类,所以kang类的对象具有xiu类的所有成员和方法
<?php class xiu { private $name; function setName($name) { $this -> name = $name; } function getName(){ return $this -> name; } } class kang extends xiu { function getKang() { echo "kang方法"; } } $kang = new kang(); $kang -> setName("修抗"); echo $kang -> getName();//输出修抗 $kang -> getKang();//输出kang方法 ?>
下面的列子是kang类继承了xiu类,ceo类继承了kang类
所以knag对象拥有xiu类的成员和方法,而ceo对象拥有kang类和xiu类的成员和方法
<?php class xiu {} class kang extends xiu {} class ceo extends kang {} ?>
- 继承和构造函数
如果父类有构造函数,而子类没有构造函数,那么子类实例化的时候会执行父类的构造函数
<?php class xiu { function __construct(){ echo "执行父类构造函数"; } } class kang extends xiu { } $kang = new kang();//输出"执行父类构造函数" ?>
但如果子类也有构造函数,那不管父类有没有构造函数,只会执行子类的构造函数
<?php class xiu { function __construct(){ echo "执行父类构造函数"; } } class kang extends xiu { function __construct(){ echo "执行子类构造函数"; } } $kang = new kang();//输出"执行子类构造函数" ?>
同时执行父类和子类的构造函数,需要添加 parent::__construct()(如果父类没有构造函数就会去找祖类)
<?php class xiu { function __construct(){ echo "执行父类构造函数"; } } class kang extends xiu { function __construct(){ parent::__construct(); echo "执行子类构造函数"; } } $kang = new kang();//输出"执行父类构造函数执行子类构造函数" ?>
假设创建新的ceo对象时,需要xiu类和kang类的构造函数都在执行,此时就可以在ceo的构造函数中显式的引用这些函数
class ceo extends kang { function __construct(){ xiu::__construct(); kang::__construct(); } }
- 继承与延迟静态绑定
self关键词会在编译时而非运行时确定其作用域(运行后编译)
<?php class xiu { static $name = "xiu"; static function getName(){ echo self::$name; } } class kang extends xiu { static $name = "kang"; } echo kang::getName();//输出"xiu" ?>
接口
- 实现一个接口
使用interface关键字创建接口
接口的属性必须是常量
接口的方法必须是public,且不能有函数体
使用implements关键字实现接口类
类必须实现接口中的所有方法
interface xiu{ const brand = 'siemens'; public function connect(); } class kang implements xiu{ public function connect(){ echo self::brand; } }
- 实现多个接口
类可以同时实现多个接口
interface xiu{ public function connect(); } interface kang{ public function contact(); } class sear implements xiu,kang{ public function connect(){} public function contact(){} }
抽象类
抽象类是不能实例化的类,只能被其他类继承
抽象类定义的所有方法都必须在子类实现
abstract class xiu { public $name; abstract public function kang(); } class sear extends xiu{ function kang(){} }
高级OOP特性(6)的更多相关文章
- 高级SQL特性
SQL SQL 必知必会·笔记<20>高级SQL特性 摘要: 约束(constraint)就是管理如何插入或处理数据库数据的规则.DBMS通过在数据库表上施加约束来实施引用完整性.1. ...
- Redis数据库高级实用特性:持久化机制
Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair
- Redis学习第八课:Redis高级实用特性(二)
Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...
- Redis学习第八课:Redis高级实用特性(一)
Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...
- HTML6的10个高级新特性
网络技术正趋向于发展为一个巨大的移动APP市场,在Web开发的革命浪潮中起着指示性作用,自HTML引入以来,应用程序变得So easy,web开发中运用先进技术也很容易处理各种复杂Bug. 作为专业的 ...
- 使用JavaScript OOP特性搭建Web应用
最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 J ...
- Java高级类特性(二)
一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...
- 22 高级SQL特性
1.约束 为正确地进行关系数据库设计,需要一种方法来保证只在表中插入合法的数据.例如,如果Orders表存储订单信息,OrderItems表存储订单详细内容,应该保证Orderitems中引用的任何订 ...
- redis高级实用特性
1. 安全性 2. 主从复制 3. 事务处理 4. 持久化机制 5. 发布订阅消息 : 可以做一个消息系统 6. 虚拟内存的使用 一 . 安全性 设置客户端连接后进行任何其他指定前需要使用的密码 . ...
随机推荐
- 深度剖析PHP序列化和反序列化
序列化 序列化格式 在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构. 序列化函数原型如下: string serialize ( mixed $value ) 先看下面 ...
- Opencv读取并获取视频属性
opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头.常用的操作如下: 1.常用构造函数 1.VideoCapture类的构造函数:C++: VideoCapture::Vid ...
- Ambari Log Search
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/8630195.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- 神奇的RAC宏
先说说RAC中必须要知道的宏 RAC(TARGET, [KEYPATH, [NIL_VALUE]]) 使用: RAC(self.outputLabel, text) = self.inputTex ...
- 一个shell脚本,让你的linux命令行酷炫起来
可调用如下函数达到echo出来带颜色的文字.._echo_error() { echo -ne "\033[31;1m $1\033[0m\n";}_echo_ok() { ech ...
- 源码实现 --> itoa函数实现
itoa函数实现 itoa()函数的功能是将一个整数转换为一个字符串 例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家 ...
- STL --> stack栈
stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO),使用该容器时需要包含#include<stack>头文件: 定义stack对象示例: s ...
- selenium + robotframework的运行原理
1.点击ride界面启动用例执行时,首先会调用脚本 2.打开pybot脚本查看内容. 3.打开robot包下面的run文件,我们可以看到信息 run文件内容 程序启动的入口, sys.agv所表达的含 ...
- 如何使用 RESTClient 调试微信支付接口
我们知道微信支付使用http协议进行api调用,body 使用xml格式,使用的一般http在线调试工具,无法进行xml数据的post. RESTClient 做的很好,支持各种http 方法,bod ...
- [CentOS] SSH 免密钥登录
一.环境说明: 操作系统:CentOS-7-x86_64-Minimal-1611 虚拟机:VMware® Workstation 12 Pro:12.5.5 build-5234757 服务器:no ...