我正在将PHP 5.3库转换为可在PHP 5.2上使用。阻碍我前进的主要因素是使用后期静态绑定,例如return new static($options);,如果将其转换为,return new self($options)将会得到相同的结果吗?
return new static($options);
return new self($options)
new self和之间有什么区别new static?
new self
new static
我会得到相同的结果吗?
并不是的。不过,我不知道针对PHP 5.2的解决方法。
self指的new是实际写入关键字的同一类。
self
new
static在PHP 5.3的最新静态绑定中,指的是您在层次结构中调用方法的任何类。
static
在以下示例中,B从继承两个方法A。该self调用必然会A因为它在定义A的实现第一种方法的,而static必然要调用的类(见get_called_class())。
B
A
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