php 类和对象

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:29   1084   0

面向对象,是当今编程的主流,对于研发人员,可能对面向对象,多多少少的有一些认识,但是有些不常用的或许不是特别清楚。有时也是很有用的。下面就介绍几点知识。


一、final 关键字的一些知识:


1、final 关键字作为方法是可以被子类继承的。如下面:

class A{
    final function operation(){
        echo 'a';
    }
}

class B extends A{
}


$a=new B();
$a->operation();

result :a


2、final 关键字作为类是不可以继承的,如下:


<?php 
final class A{
    final function operation(){
        echo 'a';
    }
}

class B extends A{
}


$a=new B();
$a->operation();


会有如下错误:

( ! ) Fatal error: Class B may not inherit from final class (A) in D:\wamp\www\examble\index19.php on line 9


3、final 关键字作为的方法不能被子类覆盖,也就是说子类不能有相同的方法,如下

 class A{
    final function operation(){
        echo 'a';
    }
}

 class B extends A{
     function operation(){
        echo 'a';
    }
}


$a=new B();
$a->operation();

会有如下错误:

( ! ) Fatal error: Cannot override final method A::operation() in D:\wamp\www\examble\index19.php on line 12


二、php 多重继承的实现,以下的例子在php 中将会有个致命的错误。

 class A{
    public  function operation(){
        echo 'a';
    }
}

class C{
    public function oper(){
        echo 'c';
    }
}

 class B extends A{
   public  function operation(){
        echo 'a';
    }
}

 class B extends C{
   public function operati(){
      echo 'd';
   }
}


$a=new B();
$a->operation();

( ! ) Fatal error: Cannot redeclare class B in D:\wamp\www\examble\index19.php on line 24


这种形式的多种继承不被允许的。


如果非要实现多种继承,那么只能通过接口的方式实现呢。


 interface Displayable{
   public function display();
 }
 
 interface B{
   public function show();
 }
 
 class A implements Displayable,B{
   public function display(){
     echo 'a';
   }
   public function show(){
     echo 'b';
   }
 }
 
 $ab=new A();
 $ab->display();
 $ab->show();

注意接口的方法都是public,接口的方法只有方法,没有方法体,子类重写接口的方法,接口的方法在子类必须都被重写。

三、 延迟静态绑定

php 5.3 引进了延迟静态绑定的概念是,该特性是允许在一个静态继承的上下文中对一个被调用类的引用。也就是说父类可以使用子类重载的静态方法。如下所示:

class A{
     public static function who(){
        echo __CLASS__;
     }
     public static function test(){
         static::who();
     }
 }
 
 class B extends A{
     public static function who(){
       echo __CLASS__;
     }
 }
 
 A::test();
输入B

php 手册有更多的介绍。


四,抽象类与接口的区别

抽象方法与接口有相同之处,都是只有方法名,没有方法体。

抽象方法的类必须是抽象类。

抽象方法与接口的方法,在子类都必须去实现。

抽象方法不支持多继承,接口可以实现多重继承。

抽象类不能继承抽象类。

接口能继承接口如下。

<?php
 interface a{
   public function  e();
 }
 
 interface b extends a{
  public function b();
 }
 
 class c implements b{
   public function b(){
       echo 'fddfdf';
   }
   public function e(){
       echo 'fddf';
   }
 }
 
 
 $c=new c();
 $c->b();

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP