Зачем new static
в закрытии (в классе static
метод) равно new self
в PHP5.5, хотя он правильно связан в PHP5.6?
Дано:
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 {
}
затем
Child::make($someArray);
// PHP5.5 FatalError: cannot instantiate abstract class Parent
// PHP5.6 works fine, as expected
В 5.5 это будет работать как положено:
public static function make($array)
{
$child = get_called_class();
return array_map(function ($el) use ($chlid) {
return new $child($el);
}, $array);
}
но почему это происходит? На php.net я не нашел упоминаний об изменениях статической привязки в 5.6.
Похоже эта ошибка, исправлено в 5.5.14.
Других решений пока нет …