新自我与新静态
2022-08-30 05:50:48
我正在转换一个PHP 5.3库来使用PHP 5.2。阻碍我的主要事情是使用后期静态绑定,如果我将其转换为会得到相同的结果吗?return new static($options);
return new self($options)
和 有什么区别?new self
new static
我正在转换一个PHP 5.3库来使用PHP 5.2。阻碍我的主要事情是使用后期静态绑定,如果我将其转换为会得到相同的结果吗?return new static($options);
return new self($options)
和 有什么区别?new self
new static
我会得到同样的结果吗?
没有。不过,我不知道PHP 5.2的解决方法。
和 有什么区别?
new self
new static
self
引用实际写入关键字的同一类。new
static
,在 PHP 5.3 后期的静态绑定中,它指的是层次结构中调用方法的任何类。
在下面的示例中,从 继承这两种方法。调用被绑定是因为它是在第一个方法的实现中定义的,而它被绑定到被调用的类(另请参阅get_called_class()
)。B
A
self
A
A
static
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
如果此代码的方法不是静态的,则可以使用 在 5.2 中获取解决方法。get_class($this)
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"