
Продвинутая интерполяция
Иногда в длинную строку нужно подставить константы / статические свойства или результаты функций / статических методов.
Первой на ум приходит интерполяция, но в PHP она невозможна без переменной, даже при использовании фигурных скобок. То есть вот так нельзя:
Костыль Выход есть! Присвоим переменной имя функции
Если пойти чуть дальше и обернуть
https://3v4l.org/DogHB
Иногда в длинную строку нужно подставить константы / статические свойства или результаты функций / статических методов.
Первой на ум приходит интерполяция, но в PHP она невозможна без переменной, даже при использовании фигурных скобок. То есть вот так нельзя:
echo "Число Эйлера: {M_E}"
. Можно для всех выражений объявить переменные и уже их интерполировать, но получится слишком громоздко. Можно оформить через sprintf
, но в многочисленных безымянных %s
и %20$d
будет легко запутаться.strval
. Мы получили "интерполятор" callable(mixed): string
, при помощи которого в литерал можно подставить любое приводимое к строке выражение:
$intrp = 'strval';
echo "Число Эйлера: {$intrp(M_E)}";
Если пойти чуть дальше и обернуть
sprintf
в класс с __invoke
, зафиксировав первый аргумент (partial application!), получится мощный универсальный интерполятор.https://3v4l.org/DogHB