From 0d080ffe5a482df9ea2a941f9421838c6e019bf0 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Mon, 15 Jan 2024 10:19:00 +0100 Subject: [PATCH] Add possibility to add objects to decoder array --- src/Drivers/AbstractDriver.php | 17 +++++++++++++---- src/Interfaces/DriverInterface.php | 6 +++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Drivers/AbstractDriver.php b/src/Drivers/AbstractDriver.php index 2b042e2f..6f645c89 100644 --- a/src/Drivers/AbstractDriver.php +++ b/src/Drivers/AbstractDriver.php @@ -3,6 +3,7 @@ namespace Intervention\Image\Drivers; use Intervention\Image\Exceptions\NotSupportedException; +use Intervention\Image\Exceptions\RuntimeException; use Intervention\Image\Interfaces\AnalyzerInterface; use Intervention\Image\Interfaces\DecoderInterface; use Intervention\Image\Interfaces\DriverInterface; @@ -50,10 +51,18 @@ abstract class AbstractDriver implements DriverInterface * * @see DriverInterface::specializeMultiple() */ - public function specializeMultiple(array $objects): array + public function specializeMultiple(array $specializables): array { - return array_map(function ($classname) { - return $this->specialize(new $classname()); - }, $objects); + return array_map(function ($specializable) { + return $this->specialize( + match (true) { + is_string($specializable) => new $specializable(), + is_object($specializable) => $specializable, + default => throw new RuntimeException( + 'Specializable item must be either a class name or an object.' + ) + } + ); + }, $specializables); } } diff --git a/src/Interfaces/DriverInterface.php b/src/Interfaces/DriverInterface.php index 828d5eae..2f09dc7a 100644 --- a/src/Interfaces/DriverInterface.php +++ b/src/Interfaces/DriverInterface.php @@ -20,12 +20,12 @@ interface DriverInterface public function specialize(object $object): ModifierInterface|AnalyzerInterface|EncoderInterface|DecoderInterface; /** - * Resolve each object in given array into a specialized version for the current driver + * Resolve array of classnames or objects into their specialized version for the current driver * - * @param array $objects + * @param array $specializables * @return array */ - public function specializeMultiple(array $objects): array; + public function specializeMultiple(array $specializables): array; /** * Create new image instance with the current driver in given dimensions