Dumpable
Несмотря на то, что типаж технически новый в Laravel 11, я бы сказал, что он консолидирует идею dump()
и dd()
в повторно используемый типаж, так что классам не нужно вручную реализовывать его отдельно. Разработчики приложений и авторы пакетов также могут извлечь выгоду из этой новой illumiate/support
функции, чтобы легко добавлять методы отладки в цепные классы.
В Laravel 10 мы уже наслаждаемся возможностью связывать в a или ->dump()
с различными классами фреймворка, такими как Carbon
, , запрос Builder
и TestResponse
:
use Illuminate\Support\Carbon;
$time = Carbon::now()
->addDay()
->addMinute()
->addSecond();
// dumping before adding a minute and second
$time = Carbon::now()
->addDay()
->dump()
->addMinute()
->dump()
->addSecond();
Однако в Laravel 10 dump()
методы and dd()
создавались ad hoc в каждом классе отдельно, Stringable
тогда как в Laravel 11 весь этот код был консолидирован в типаж Dumpable, который мы можем использовать в ->dd()
любом классе. Вот пример из класса Illuminate Carbon
в Laravel 11:
use Illuminate\Support\Traits\Dumpable;
class Carbon extends BaseCarbon
{
use Conditionable, Dumpable;
// ...
}
Реализация dump()
выглядит следующим образом в типаже Dumpable. Единственное отличие заключается dd()
в том, что код остановит выполнение и выйдет:
public function dump(...$args)
{
dump($this, ...$args);
return $this;
}
Shout-out to Nuno Maduro за реализацию этой функции в Pull Request #47122 для очистки внутреннего использования этих методов, но также проложил путь для приложений и пакетов, использующих этот типаж.