Задать вопрос

Почему не получается передать в качестве аргумента функцию из другого пространства имен по его алиасу?

Доброй ночи.
Имеется код следующего вида:
namespace Roots\Sage\Extras;

use Roots\Sage\Config;
use Roots\Sage\NavWalkers;
use Roots\Sage\Utils;

function crop_classes($classes) {
    return array_filter($classes, 'Utils\\is_element_empty'); // Здесь ошибка 'function not found'
}


Мне надо добиться передачи в array_filter функции из пространства имен наиболее красивым способом. Все пространства имен 100% верные, т.к. если написать полный путь, все будет работать.
return array_filter($classes, 'Roots\\Sage\\Utils\\is_element_empty'); // Все работает


Почему так происходит, и можно ли все-таки использовать алиас вместо полного пути?

Спасибо.
  • Вопрос задан
  • 127 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
array_filter из глобального неймспейса. Она понятия не имеет, где ее вызывают, тем более, какие из неймспейсов подключены через use, посему - нет.

По хорошему передача функции по имени - не самая лучшая идея, ошибки вы обнаружите уже в момент выполнения.

Лучше писать примерно так:

return array_filter(
    $classes,
    function ($value) {
        return Roots\Sage\Utils\is_element_empty($value);
    }
);


Конкретно случай is_element_empty не имеет смысла так как array_filter это делает по умолчанию. Кроме того вы жестко нарушаете PSR, что тоже очень плохо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽