新的自我与新的静态

我正在转换PHP 5.3库来处理PHP 5.2。 在我的方式站在主要的东西是使用晚静态绑定,如return new static($options); ,如果我转换这个return new self($options)我会得到相同的结果?

new selfnew static什么区别?

我会得到相同的结果吗?

不是真的。 不过,我不知道PHP 5.2的解决方法。

new selfnew static什么区别?

self指的是new关键字实际写入的同一个类。

static ,在PHP 5.3的后期静态绑定中,指的是您调用方法的层次结构中的任何类。

在下面的例子中, Binheritance了A两个方法。 self调用被绑定到A因为它在A的第一个方法的实现中定义,而static被绑定到被调用的类(也参见get_called_class() )。

 class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A 

如果此代码所在的方法不是静态的,则可以使用get_class($this)在5.2中find解决方法。

 class A { public function create1() { $class = get_class($this); return new $class(); } public function create2() { return new static(); } } class B extends A { } $b = new B(); var_dump(get_class($b->create1()), get_class($b->create2())); 

结果:

 string(1) "B" string(1) "B" 
Interesting Posts