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

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

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

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

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

首先来看下面这个例子:

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

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

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

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

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

Tags: PHP静态绑定

分享到: