2015-03-01 24 views
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.

Odpowiedz

3

Wygląda this bug, ustalone w 5.5.14.

+0

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 –

+0

@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

+0

Pewnie. Nie wiedziałem o datach premiery :) –