新的自我与新的静态

我正在将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的后期静态绑定中,指的是您调用方法的层次结构中的任何类。

在下面的例子中, 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

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

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"
链接地址: http://www.djcxy.com/p/9953.html

上一篇: New self vs. new static

下一篇: Difference between require, include, require