Есть такой вызов:
return DataHelper::createFullnameFormatter()($this);
Но интерпретатор упорно ругается на потерянную скобку (именно на этой строке где вызов):
syntax error, unexpected '('
Я все раз 100 пересмотрел - ну нет нигде потерянной скобки. Это моя реализация нескольких несложных хелперов, основанных на замыканиях:
/**
* @param string $format
* @param array ...$attributes
* @return \Closure
*/
public static function createFormatter($format, ...$attributes) {
return function($model) use($format, $attributes) {
$args = self::toArray($model, $attributes);
return vsprintf($format, $args);
};
}
/**
* @return \Closure
*/
public static function createFullnameFormatter() {
return self::createFormatter('%s %s %s', 'lastname', 'firstname', 'middlename');
}
/**
* @param Model|array|object $model
* @param array $attributes
* @return array
*/
public static function toArray($model, $attributes = []) {
if ($model instanceof Model)
$model = $model->attributes;
elseif (is_object($model))
$model = get_object_vars($model);
elseif (!is_array($model))
throw new \InvalidArgumentException(sprintf('$model must be instance of "%s", array or object!', Model::className()));
$selector = function($key) use($attributes) {
return in_array($key, $attributes);
};
return $attributes ? array_filter($model, $selector, ARRAY_FILTER_USE_KEY) : $model;
}
При этом когда я вызываю так:
return call_user_func(DataHelper::createFullnameFormatter(), $this);
работает без ошибок. Но так вызывать длиннее и менее читабельно. Мне бы хотелось разобраться почему не работает первый вариант? Это что опять проблема синтаксиса? Пхп не поддерживает такое?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости