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)的更多相关文章

  1. 高级SQL特性

    SQL   SQL 必知必会·笔记<20>高级SQL特性 摘要: 约束(constraint)就是管理如何插入或处理数据库数据的规则.DBMS通过在数据库表上施加约束来实施引用完整性.1. ...

  2. Redis数据库高级实用特性:持久化机制

    Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair

  3. Redis学习第八课:Redis高级实用特性(二)

    Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...

  4. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

  5. HTML6的10个高级新特性

    网络技术正趋向于发展为一个巨大的移动APP市场,在Web开发的革命浪潮中起着指示性作用,自HTML引入以来,应用程序变得So easy,web开发中运用先进技术也很容易处理各种复杂Bug. 作为专业的 ...

  6. 使用JavaScript OOP特性搭建Web应用

    最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 J ...

  7. Java高级类特性(二)

    一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...

  8. 22 高级SQL特性

    1.约束 为正确地进行关系数据库设计,需要一种方法来保证只在表中插入合法的数据.例如,如果Orders表存储订单信息,OrderItems表存储订单详细内容,应该保证Orderitems中引用的任何订 ...

  9. redis高级实用特性

    1. 安全性 2. 主从复制 3. 事务处理 4. 持久化机制 5. 发布订阅消息 : 可以做一个消息系统 6. 虚拟内存的使用 一 . 安全性 设置客户端连接后进行任何其他指定前需要使用的密码 . ...

随机推荐

  1. 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)

    GoF中定义: "提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类." 意思就是 根据不同的执行环境产生不同的抽象类子类 抽象工厂模式经常在面试中会涉及到 下面的例 ...

  2. 【Unity与23种设计模式】迭代器模式(Iterator)

    GoF中定义: "在不知道集合内部细节的情况下,提供一个按序方法存取一个对象集合体的每一个单元." 迭代器模式由于经常使用到 已经被现代程序设计语言纳为标准语句或收录到标准函数库中 ...

  3. 前端touch事件方向的判断

    移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标 ...

  4. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  5. ELK日志收集平台部署

    需求背景 由于公司的后台服务有三台,每当后台服务运行异常,需要看日志排查错误的时候,都必须开启3个ssh窗口进行查看,研发们觉得很不方便,于是便有了统一日志收集与查看的需求. 这里,我用ELK集群,通 ...

  6. [poj2585]Window Pains_拓扑排序

    Window Pains poj-2585 题目大意:给出一个4*4的方格表,由9种数字组成.其中,每一种数字只会出现在特定的位置,后出现的数字会覆盖之前在当前方格表内出现的.询问当前给出的方格表是否 ...

  7. android中activity.this跟getApplicationContext的区别

    转载: http://www.myexception.cn/android/1968332.html android中activity.this和getApplicationContext的区别 在a ...

  8. python 函数基础2

    一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点:1.约束函数的调用者必须按照Kye=value的形式传值. 2,.约束函数的调用者必须用我们指定的Key名. def aut ...

  9. Leaflet客户端学习笔记

    Leaflet介绍 Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.支持插件扩展, L ...

  10. [学习笔记] 模拟退火 (Simulated Annealing)

    真没想到这东西真的在考场上用到了...顺便水篇blog以示诈尸好了(逃 模拟退火算法 模拟退火是一种随机化算法, 用于求函数的极值qwq 比如给出一个问题, 我们要求最优解的值, 但是可能的方案数量极 ...