5
Dlaczego new static
w zamknięciu (w metodzie klasy static
) jest równe new self
w PHP5.5, a jest poprawnie powiązane w PHP5.6?późne wiązanie statyczne w zamknięciu PHP5.5 vs 5.6
Dane:
abstract class Parent {
public function __construct($something)
{
$this->something = $something;
}
public static function make($array)
{
return array_map(function ($el) {
return new static($el);
}, $array);
}
}
class Child extends Parent {
}
następnie
Child::make($someArray);
// PHP5.5 FatalError: cannot instantiate abstract class Parent
// PHP5.6 works fine, as expected
w 5,5 to będzie działać zgodnie z oczekiwaniami:
public static function make($array)
{
$child = get_called_class();
return array_map(function ($el) use ($chlid) {
return new $child($el);
}, $array);
}
ale dlaczego tak się dzieje? Nie znalazłem żadnych wzmianek na php.net dotyczących statycznych zmian wiążących w 5.6.
Tak. Jeszcze bardziej interesujące jest to, że zostało ono już naprawione w [5.4.30] (http://3v4l.org/lk4i0#v5430) do wersji 5.4.38, ale najwyraźniej nie jest zawarte w 5.5.0. Dzięki –
@JarekTkaczyk: php obsługuje wiele oddziałów na raz, więc każdy 5.4. * Niekoniecznie poprzedza 5.5. *. W tym przypadku, 5.4.30 i 5.5.14 zostały wydane w [tego samego dnia] (http://php.net/ChangeLog-5.php). – georg
Pewnie. Nie wiedziałem o datach premiery :) –