一尘不染

新自我与新静态

php

我正在将PHP 5.3库转换为可在PHP 5.2上使用。阻碍我前进的主要因素是使用后期静态绑定,例如return new static($options);,如果将其转换为,return new self($options)将会得到相同的结果吗?

new self和之间有什么区别new static


阅读 253

收藏
2020-05-26

共1个答案

一尘不染

我会得到相同的结果吗?

并不是的。不过,我不知道针对PHP 5.2的解决方法。

new self和之间有什么区别new static

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

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

在以下示例中,B从继承两个方法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
2020-05-26