seft和static在php中有什么不同

BoltClock

seft和static返回的结果是否相同?

不尽然。但我不知道在php5.2中是怎么样的。

self指的是定义产生new操作的方法的那个类(定义那个方法的类)。

static在php5.3以后静态绑定指的是你在哪个层次中调用方法的类(实际调用的类)。

在下面的例子中,我们可以更好的理解。B从A继承两个方法。seft界定为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_static()); // A

京ICP备14008139号-1