2015-03-01 8 views
5

Perché new static nella chiusura (in un metodo classe static) è uguale a new self in PHP5.5, mentre è correttamente associato in PHP5.6?binding statico tardivo in chiusura PHP5.5 vs 5.6

Dato:

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 { 

} 

poi

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

In 5.5 questo funzionerà come previsto:

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

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

ma perché sta succedendo questo? Non ho trovato alcuna menzione su php.net riguardante le modifiche al binding statico in 5.6.

risposta

3

Sembra this bug, risolto in 5.5.14.

+0

Sì. Ancora più interessante è che è stato risolto già in [5.4.30] (http://3v4l.org/lk4i0#v5430) tramite 5.4.38, ma apparentemente non incluso in 5.5.0. Grazie –

+0

@JarekTkaczyk: php supporta più filiali alla volta, quindi qualsiasi 5.4. * Non precede necessariamente 5.5. *. In questo caso, 5.4.30 e 5.5.14 sono stati rilasciati lo [stesso giorno] (http://php.net/ChangeLog-5.php). – georg

+0

Sicuro. Non ero a conoscenza delle date di rilascio :) –