Почему возникает ошибка syntax error, unexpected '('?

192
20 ноября 2017, 20:55

Есть такой вызов:

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);

работает без ошибок. Но так вызывать длиннее и менее читабельно. Мне бы хотелось разобраться почему не работает первый вариант? Это что опять проблема синтаксиса? Пхп не поддерживает такое?

READ ALSO
Подскажите как правильно написать SELECT

Подскажите как правильно написать SELECT

Здравствуйте, подскажите как правильно записать цикл для создания массива значений meta_value после выборкиПытаюсь так:

205
Выбрать строки из таблицы средствами checkbox

Выбрать строки из таблицы средствами checkbox

Нужно сделать удаление строк, выбранный через чекбоксПри исполнении файла db_delete выдно, что данные от чекбокса не получаются

249
Как правильно залить код сайта для вопроса?

Как правильно залить код сайта для вопроса?

Как правильно залить код сайта для того, чтобы задать вопрос на Stack Overflow? У страницы много PHP-элементов, которые импортируются через inqlude, поэтому...

153
file_get_contents проверка наличия пустоты

file_get_contents проверка наличия пустоты

Есть код который выводит список друзей, которые приходят в url в формате json

180