高级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. 虚拟内存的使用 一 . 安全性 设置客户端连接后进行任何其他指定前需要使用的密码 . ...
随机推荐
- 使用MBROSTool 工具制作本地硬盘F3救急模式的方法总结
前面写了一篇使用MBROSTool 工具制作本地硬盘多启动盘的方法总结.里面就是可以把一些系统安装到硬盘上面方便使用,比如安装PE到硬盘,不过启动的时候会先进入多UDm菜单,然后选择[启动本地系统]后 ...
- 关于“应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具”问题的解决方法
今天打开QQ管家加速版的时候突然出现了这个错误,百度了下说是系统缺少Microsoft Visual C++ 20XX(运行库),下载这个安装即可解决问题.
- rocketMq概念介绍
rocketMq官网 http://rocketmq.apache.org/ rocketMq逻辑概念介绍 rocketMq逻辑图 备注: 改图片分享自李占卫的网上家园 说明: 在rocketM ...
- 1-3 Spring Bean 的属性值设置
详见http://www.cnblogs.com/chenssy/archive/2013/03/17/2964593.html 1.注入普通的属性值 <bean id="Cat&qu ...
- JavaIO
1.字节流和字符流 在IO有两种数据传输格式一个是字符流还一个是字节流,但是字符流就会涉及到编码的问题. 一开始美国使用的自己的编码表就是ASCII表 中国的字符需要被识别也需要编码表于是就有了GB2 ...
- 使用pm2躺着实现负载均衡
事实上,pm2 是一个带有负载均衡功能的Node应用的进程管理器,Node实现进程管理的库有很多,forever也是其中一个很强大但是也相对较老的进程管理器. 为什么要使用pm2 对于这个问题,先说说 ...
- python读取三维点云球坐标数据并动态生成三维图像与着色
关键步骤: 1.首先通过读取.txt文本数据并进行一系列字符串处理,提取显示所需要的相关数据矩阵 2.然后利用python的matplotlib库来进行动态三维显示 备注:matplotlib在显示2 ...
- curl 获取外网IP
#curl http://members.3322.org/dyndns/getip121.204.134.10
- php中heredoc与nowdoc的使用方法
一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义.其结构中的变量将被替换,但在 heredoc 结构中含有复杂的 ...
- Linux下的进程与线程(二)—— 信号
Linux进程之间的通信: 本文主要讨论信号问题. 在Linux下的进程与线程(一)中提到,调度器可以用中断的方式调度进程. 然而,进程是怎么知道自己需要被调度了呢?是内核通过向进程发送信号,进程才得 ...