New self vs. new static

I am converting a PHP 5.3 library to work on PHP 5.2. The main thing standing in my way is the use of late static binding like return new static($options); , if I convert this to return new self($options) will I get the same results?

What is the difference between new self and new static ?


will I get the same results?

Not really. I don't know of a workaround for PHP 5.2, though.

What is the difference between new self and new static ?

self refers to the same class in which the new keyword is actually written.

static , in PHP 5.3's late static bindings, refers to whatever class in the hierarchy you called the method on.

In the following example, B inherits both methods from A . The self invocation is bound to A because it's defined in A 's implementation of the first method, whereas static is bound to the called class (also see 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

If method this code is in is not static, you can get a work-around in 5.2 by using 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()));

The results:

string(1) "B"
string(1) "B"
链接地址: http://www.djcxy.com/p/9954.html

上一篇: htmlentities()与htmlspecialchars()

下一篇: 新的自我与新的静态