2015-03-01 5 views
5

Warum new static in der Schließung (in einer Klasse static Methode) ist gleich new self in PHP5.5, während es in PHP5.6 ordnungsgemäß gebunden ist?späte statische Bindung in Schließung PHP5.5 vs 5.6

Gegeben:

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 { 

} 

dann

Child::make($someArray); 
// PHP5.5 FatalError: cannot instantiate abstract class Parent 
// PHP5.6 works fine, as expected 

In 5.5 wird dies wie erwartet:

public static function make($array) 
{ 
    $child = get_called_class(); 

    return array_map(function ($el) use ($chlid) { 
     return new $child($el); 
    }, $array); 
} 

aber warum ist das passiert? Ich habe auf php.net keine Erwähnung bezüglich statischer Bindungsänderungen in 5.6 gefunden.

Antwort

3

Sieht aus wie , behoben in 5.5.14.

+0

Ja. Noch interessanter ist, dass es bereits in [5.4.30] (http://3v4l.org/lk4i0#v5430) durch 5.4.38 behoben wurde, aber anscheinend nicht in 5.5.0 enthalten ist. Danke –

+0

@ JarekTkaczyk: php unterstützt mehrere Zweige zu einer Zeit, so dass alle 5.4. * Nicht unbedingt vor 5.5. *. In diesem Fall wurden 5.4.30 und 5.5.14 am selben Tag veröffentlicht (http://php.net/ChangeLog-5.php). – georg

+0

Sicher. Ich war mir der Veröffentlichungstermine nicht bewusst :) –