• php面向对象高级应用一


    php面向对象之instanceof关键字的用法

    instanceof的作用有2个:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。

    (1)判断一个对象是否是某个类的实例

    下面针对第一种用法我们来看个实例:

    首先创建一个父类,再创建一个子类去继承父类。实例化子类对象,然后去判断对象是不是属于子类,再判断是不是属于父类。

    <?php
    
    class Itbook{
    
    }
    
    class Phpbook extends Itbook{
      private $bookname;
    }
    
    $book = new Phpbook();
    if($book instanceof Phpbook){
      echo '$book属于Phpbook类<br>';
    }
    if($book instanceof Itbook){
      echo '$book属于Itbook类';
    }

    (2)判断一个对象是否实现了某个接口

    <?php
    
    interface TestInterface{
      public function interfaceMethod();
    }
    
    class TestClass implements TestInterface{
      public function interfaceMethod(){
        return 'cyy is cute.';
      }
    }
    
    $test = new TestClass();
    if($test instanceof TestInterface){
      echo '$test实现接口TestInterface';
    }else{
      echo '$test没有实现接口TestInterface';
    }

    php面向对象之对象克隆方法

    使用传址引用的方式调用对象,实质调用的是同一个对象,有时需要建设立一个对象的副本,改变原来的对象时不希望影响到副本,在PHP中可以根据现在的对象来克隆出一个完全一样的对象,克隆出来的副本和原本两个对象完全独立而互不干扰。

    我们举个简单的例子来看一下克隆的用法:

    <?php
    
    class Person{
      public $name;
      function __construct($name){
        $this->name = $name;
      }
    
      function me(){
        echo '我是:'.$this->name;
      }
    }
    
    $person1 = new Person('cyy');
    $person2 = clone $person1;
    $person1->me();
    echo '<br>';
    $person2->me();

    结果如下:

    我是:cyy
    我是:cyy

    还是上面的实例,只是稍微发生点变动。

    <?php
    
    class Person{
      public $name;
      function __construct($name){
        $this->name = $name;
      }
    
      function me(){
        echo '我是:'.$this->name;
      }
    }
    
    $person1 = new Person('cyy');
    $person2 = clone $person1;
    $person1->me();
    echo '<br>';
    $person2->name='cyy2';
    $person2->me();

    上述实例的结果

    我是:cyy
    我是:cyy2

    __clone的用法

    很多时候我们不单单要去克隆一个对象,还想让对象可以拥有自己的属性和方法。那么我们就要在类中创建一个__clone方法。这个方法类似于构造函数和析构函数,因为不会直接调用它。

    还是以上面的实例为例:

    <?php
    
    class Person{
      public $name;
      function __construct($name){
        $this->name = $name;
      }
    
      function __clone(){
        $this->name = 'cyy01';
      }
    
      function me(){
        echo '我是:'.$this->name;
      }
    }
    
    $person1 = new Person('cyy');
    $person2 = clone $person1;
    $person1->me();
    echo '<br>';
    $person2->me();

    结果如下:

    我是:cyy
    我是:cyy01

    php面向对象之对象比较用法详解

    运算符“==”和“===”

    当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性个属性值都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等;

    而如果使用全等运算符(===),这两个对象变量一定要指向某各类的同一个实例(即同一个对象)。

    下面我们看个实例:

    <?php
    
    class Person{
      public $name;
      function __construct($name){
        $this->name = $name;
      }
    }
    
    $person1 = new Person('cyy');
    $person2 = new Person('cyy');
    if($person1 === $person2){
      echo '$person1 === $person2<br>';
    }else if($person1 == $person2){
      echo '$person1 == $person2<br>';
    }else{
      echo '$person1 != $person2<br>';
    }
    
    $person3 = $person1;
    if($person1 === $person3){
      echo '$person1 === $person3<br>';
    }else if($person1 == $person3){
      echo '$person1 == $person3<br>';
    }else{
      echo '$person1 != $person3<br>';
    }

    结果如下:

    $person1 == $person2
    $person1 === $person3

    实例解析:

    使用全等运算符(===),这两个对象变量一定要指向某各类的同一个实例(即同一个对象)。只有当运算符“===”两边比较的值是同一个对象的时候,才能成立。

    php面向对象之什么是抽象类?及抽象类的作用

    什么是抽象类?

    抽象类不能被实例化,同样方法也没有实现,只是提供方法声明,没有具体实现。抽象类只能作为其他类的父类使用。

    抽象类和普通类也差不多,都有成员变量和成员方法。但还是有区别的。包含抽象方法的类必须本身是抽象的。抽象方法是没有方法体的,他的功能只能在子类中完成。

    抽象类实例讲解:

    <?php
    
    abstract class Member{
      abstract function vipMember($name,$level);
    }
    
    class Member1 extends Member{
      function vipMember($name,$level){
        echo 'my name is '.$name.', my level is '.$level;
      }
    }
    class Member2 extends Member{ function vipMember($name,$level){ echo 'my name is '.$name.', my level is '.$level; } }
    $mem1 = new Member1(); $mem1->vipMember('cyy','1'); echo '<br>'; $mem1 = new Member1(); $mem1->vipMember('cyy2','2');

    php面向对象之final关键字用法及实例

    什么是final关键字?

    final中文翻译为“最终的”,“最后的”。在声明一个类之前用final关键词修饰,说明这个函数将不能在任何子类中被重载,继承,也就是说,被final修饰的类将不能再有子类。

    final用法实例详解:

    <?php
    
    class A{
      public $num = 25;
      final function operation(){
        echo 'num is '.$this->num;
      }
    }
    
    class B extends A{
      public $num = 50;
      function operation(){
        echo 'num is '.$this->num;
      }
    }
    
    $num = new B();
    $num->operation();

    上述示例中禁止了在B类中重载A类中的operation()方法。这样做只会报错。

    如果final写在类之前,那么讲禁止整个类被继承。

  • 相关阅读:
    moment JS 时间操作指南
    react 项目使用 echarts-wordcloud(文字云)
    moment实现计算两个时间的差值
    JS实现回到页面顶部的五种写法(从实现到增强)
    关于谷歌浏览器携带cookie失效解决方案
    Axios发送请求下载文件(重写二进制流文件)
    修改 input / textarea placeholder 属性的颜色和字体大小
    js实现数组浅拷贝和深拷贝
    JS中的可枚举属性与不可枚举属性
    物流管理
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12955172.html
Copyright © 2020-2023  润新知