Я получу те же результаты?
Не совсем. Я не знаю об обходном пути для 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