高级oop特性(代码片段)

xiukang xiukang     2022-11-01     753

关键词:

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()

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

#22.flink-高级特性-新特性-异步io原理(代码片段)

22.Flink-高级特性-新特性-异步IO-了解22.1.原理22.1.1.异步IO操作的需求https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/stream/operators/asyncio.htmlAsyncI/O是阿里巴巴贡献给社区的一个呼声非常高的特性,于1.12版本引入。主要目的是为... 查看详情

第11章(上)--面向对象编程(高级特性)

1.类变量问题引入:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决。思路在main方法中定义一个变量inttotalNum=0当有一个小孩加入游戏就totalNum++;使用功能传统... 查看详情

20.flink高级特性--新特性--双流joinjoin的分类api代码演示-windowjoin代码演示-intervaljoin(代码片段)

20.Flink高级特性–新特性–双流Join20.1.join的分类20.2.API20.3.代码演示-WindowJoin20.4.代码演示-IntervalJoin20.Flink高级特性–新特性–双流Join20.1.join的分类双流Join是Flink面试的高频问题。一般情况下说明以下几点就可以hold了:Join大... 查看详情

java面向对象(oop)--面向对象三大特性之一:多态(多态方法绑定instanceof和类型转换(重写重载和多态的关系))(代码片段)

1.多态1.1认识多态多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性... 查看详情

java面向对象(oop)--面向对象三大特性之一:封装(封装的步骤作用和意义方法重载)(代码片段)

1.封装我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口&#x... 查看详情

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

23.flink-高级特性-新特性-streamingfliesink介绍代码演示flink-高级特性-新特性-flinksql整合hive添加依赖和jar包和配置(代码片段)

23.Flink-高级特性-新特性-StreamingFlieSink23.1.介绍23.2.代码演示24.Flink-高级特性-新特性-FlinkSQL整合Hive24.1.介绍24.2.版本24.3.添加依赖和jar包和配置24.4.FlinkSQL整合Hive-CLI命令行整合24.5.FlinkSQL整合Hive-代码整合23.Flink-高级特性-新特性-Stream... 查看详情

python高级特性(代码片段)

切片(tuple)有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。操作对象:list、tuple、str;替代了其他语言的截取函数,如substring()应用场景:对经常取指定索... 查看详情

python高级特性(代码片段)

...、迭代器此文章参考廖雪峰大神的官网,地址:高级特性-廖雪峰的官方网站(liaoxuefeng.com)一、切片在python的使用中,对于列表、元组的元素取值是非常常见的,例如:注意:切片是顾头不顾尾的>> 查看详情

rabbitmq--高级特性(代码片段)

在上一篇文章讲解MQ消息可靠性投递和幂等性中有提到confirm机制的重要性,现在更相信的说明一下一、Confirm机制  Confirm就是消息确认,当Producer发送消息,如果Broker收到消息,会回复一个应答,我们可以以此来确认消息是否... 查看详情

021css高级特性(代码片段)

一:元素的显示与影藏1.比较常见的单词  dispaly,visibility,overflow  2.display案例  如果影藏了,这个元素就看不见了,然后也不保留位置1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Document</... 查看详情

oop三大特征之多态(polymorphism)(代码片段)

OOP三大特性最重要的:多态。很多程序员虽然在用支持OOP的语言,但却从未用过多态。只使用封装、继承的编程方式,称为基于对象(ObjectBased)编程只有加入多态,才能称为OOP没写过多态,就是没写... 查看详情

jvm高级特性与实践(十三):线程实现与java线程调度(代码片段)

JVM高级特性与实践(一):Java内存区域与内存溢出异常JVM高级特性与实践(二):对象存活判定算法(引用)与回收JVM高级特性与实践(三):垃圾收集算法与垃圾收集器实现JVM高级特... 查看详情

ts高级特性api(代码片段)

PartialRequiredReadonlyPick<T,KextendskeyofT>Record<Kextendskeyofany,T>Exclude<T,U>Extract<T,U>Omit<T,Kextendskeyofany>PartialPartial将属性变为可选属性。举个栗子,iUser这个接口name和a 查看详情

ts高级特性api(代码片段)

PartialRequiredReadonlyPick<T,KextendskeyofT>Record<Kextendskeyofany,T>Exclude<T,U>Extract<T,U>Omit<T,Kextendskeyofany>PartialPartial将属性变为可选属性。举个栗子,iUser这个接口name和a 查看详情

ts高级特性api(代码片段)

PartialRequiredReadonlyPick<T,KextendskeyofT>Record<Kextendskeyofany,T>Exclude<T,U>Extract<T,U>Omit<T,Kextendskeyofany>PartialPartial将属性变为可选属性。举个栗子,iUser这个接口name和a 查看详情

python的高级特性(代码片段)

...、迭代器此文章参考廖雪峰大神的官网,地址:高级特性-廖雪峰的官方网站(liaoxuefeng.com)一、切片在python的使用中,对于列表、元组的元素取值是非常常见的,例如:注意:切片是顾头不顾尾的>> 查看详情