当前位置:首页 > PHP教程 > php面向对象 > 列表

PHP面向对象之后期静态绑定功能介绍

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-27 10:23:09 浏览: 评论:0 

这篇文章主要介绍了PHP面向对象之后期静态绑定功能介绍,本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类,需要的朋友可以参考下。

本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类。

首先来看下面这个例子:

  1. class Person 
  2.  
  3.     public static function status() 
  4.     { 
  5.         self::getStatus(); 
  6.     } 
  7.  
  8.     protected static function getStatus() 
  9.     { 
  10.         echo "Person is alive"
  11.     } 
  12.  
  13.  
  14. class Deceased extends Person 
  15.  
  16.     protected static function getStatus() 
  17.     { 
  18.         echo "Person is deceased"
  19.     } 
  20.  
  21.  
  22. Deceased::status(); //Person is alive 

很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,更好的解决方案是PHP 5.3后添加了后期静态绑定的功能,代码如下:

  1. class Person 
  2.  
  3.     public static function status() 
  4.     { 
  5.         static::getStatus(); 
  6.     } 
  7.  
  8.     protected static function getStatus() 
  9.     { 
  10.         echo "Person is alive"
  11.     } 
  12.  
  13.  
  14. class Deceased extends Person 
  15.  
  16.     protected static function getStatus() 
  17.     { 
  18.         echo "Person is deceased"
  19.     } 
  20.  
  21.  
  22. Deceased::status(); //Person is deceased 

可见,static::不在指向当前所在的类,实际上,它是在运行中计算的,强制获取最终类的所有属性。

因此,建议,以后不要再使用self::,使用static::

Tags: PHP静态绑定

分享到: