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.
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 –
@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
Sicuro. Non ero a conoscenza delle date di rilascio :) –