Когда в логи надо вывалить значение неизвестного типа, начинается зоопарк: var_export ломается на ресурсах, print_r плюётся простынями, json_encode давится бинарными строками. Библиотека icecave/repr делает то, что в Python называется reprlib — короткое и понятное представление чего угодно.
use Icecave\Repr\Repr;
echo Repr::repr([1, 2, 3]);
// [1, 2, 3]
echo Repr::repr($pdo);
// <PDO #0000000012ab>
echo Repr::repr(fopen('php://memory', 'r+'));
// <resource stream #5 r+>
Массивы режутся до 3 элементов и 3 уровней вложенности с подсчётом остатка, строки — до 50 символов с экранированием контрол-кодов, а объекты показывают класс и SPL-хеш (если есть __toString или RepresentableInterface — используется он).
⚙️ Установка: composer require icecave/repr. Инструмент идеально подходит для кастомных эксепшенов и структурного логирования, где var_export выдает нечитаемый ад.
Библиотека пхпшника