PHP Static延迟静态绑定

初识PHP Static延迟静态绑定

PHP5.3以后引入了延迟静态绑定static,它是为了解决什么问题呢?php的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。来看一个例子。

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

class A

{

public static function echoClass(){

echo __CLASS__;

}

public static function test(){

self::echoClass();

}

}

class B extends A

{

public static function echoClass()

{

echo __CLASS__;

}

}

B::test(); //输出A

在PHP5.3中加入了一个新特性:延迟静态绑定,就是把本来在定义阶段固定下来的表达式或变量,改在执行阶段才决定,比如当一个子类继承了父类的静态表达式的时候,它的值并不能被改变,有时不希望看到这种情况。

下面的例子解决了上面提出的问题:

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

class A

{

public static function echoClass(){

echo __CLASS__;

}

public static function test()

{

static::echoClass();

}

}

class B extends A

{

public static function echoClass(){

echo __CLASS__;

}

}

B::test(); //输出B

第9行定义了一个静态延迟绑定方法,直到B调用test的时候才执行原本定义的时候执行的方法。

转载自:http://blog.csdn.net/suiye/article/details/8729511

时间: 2024-08-05 07:07:03

PHP Static延迟静态绑定的相关文章

PHP延迟静态绑定:static关键字

PHP5.3中引入了延迟静态绑定的概念.该特性最明显的标志就是新关键字static.static类似于self,但它指的是被调用的类而不是包含类.在本例中,它的意思是调用Document::create()将生成一个新的Document对象,而不是试图实例化一个DomainObject对象. 因此,现在在静态上下文中使用继承关系. abstract class DomainObject{ public static function create(){ return new static();

PHP延迟静态绑定 static关键字

示例代码1 abstract class Parent { } class Man extends Parent { public static function create(){ return new Man(); } } class Woman extends Parent { public static function create(){ return new Woman(); } } 示例代码有一个parent父类,还包含Man和Woman两个子类,并在该两个类中都包含创建本身的的静

php Late Static Bindings延迟静态绑定

官网说道: As of PHP 5.3.0, PHP implements a feature called late static bindings which can be used to reference the called class in a context of static inheritance. More precisely, late static bindings work by storing the class named in the last "non-forw

PHP "延迟静态绑定" 功能,static

从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法.第二点延迟绑定,这个根据下面代码就可以很好的理解 看一下这个例子: class A{ static $name = "Tom"; public function printName(){ echo self::$name."\n"; self::fun(); } static function fun(){ echo "A Class\n"; } } cla

php5.3 延迟静态绑定 static关键字

1 //传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧? 2 /* 3 4 abstract class DomainObject{} 5 6 class User extends DomainObject 7 { 8 public function __construct() 9 { 10 echo __METHOD__; 11 } 12 13 public static function create() 14 { 15

“延迟静态绑定”的使用

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 <?php class ParentBase { static $property = 'Parent Value'; public static function render() { return self::$property; } } class Descendant extends P

延迟静态绑定

延迟静态绑定 PHP的继承模型中有个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难. class ParentBase{ static $property = 'Parent Value'; public static function render(){ return self::$property; } } class Descendant extends ParentBase{ static $property = 'Descendant Value'; } echo Desc

PHP延迟静态绑定(本文属于转发)

这段时间看项目后台的PHP代码,看到了类似于以下的一段代码,我把它抽出来: <?php class DBHandler { function get() {} } class MySQLHandler extends DBHandler { // 这里一个create public static function create() { echo "MySQL"; return new self(); } public function get() { echo "MyS

PHP延迟静态绑定

php5.3已经开始支持延迟静态绑定. 延迟静态绑定指的是在父类中获取子类的最终状态.在父类中,如果出现self关键字,被子类继承后,这个self值的还是父类而不是子类. 如果在父类中出现了self关键字,并且子类继承了含有self的这段代码,那么需要考虑静态延迟绑定.在父类中使用static代替self 如下例: <?php class A{ public static $a=1; public function test(){ echo self::$a;//自身的属性a } } class