Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Junior PHP 8+

Що таке синтаксис first-class callable strlen(...)?

First-class callable syntax (PHP 8.1) створює замикання (Closure) з функції чи методу, записавши (...) замість аргументів.

$length = strlen(...);
$length('привіт');                       // 12

$format = $this->formatPrice(...);       // метод об'єкта
$create = User::create(...);             // статичний метод

array_map(trim(...), $lines);
array_filter($users, $this->isActive(...));

Чим краще за старі способи передати функцію:

array_map('trim', $lines);                        // рядок
array_filter($users, [$this, 'isActive']);        // масив
array_filter($users, fn ($u) => $this->isActive($u));   // обгортка
  • Перевіряється одразу: якщо методу не існує чи він недоступний, помилка виникне в момент створення, а не десь пізніше при виклику.
  • Рефакторинг і IDE: «перейти до визначення» і перейменування методу працюють - на відміну від імені в рядку 'isActive'.
  • Видимість: $this->privateMethod(...) усередині класу створює замикання, яке можна передати назовні й викликати, - а [$this, 'privateMethod'] поза класом не спрацює.
  • Статичний аналіз бачить сигнатуру й перевіряє типи.

Обмеження: не працює з nullsafe ($obj?->method(...) - помилка) і з new Foo(...).

PHP 8.5 доповнив це оператором конвеєра |>, який передає значення в callable праворуч: $text |> trim(...) |> strtoupper(...).

Докладніше в документації: First-class callable syntax

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання