From b3f53d425d3c05c43bb358bf899d7a845afed072 Mon Sep 17 00:00:00 2001 From: Bart Jaskulski <bjaskulski@protonmail.com> Date: Mon, 8 Jul 2024 08:22:21 +0200 Subject: [PATCH] refactor: split binder interface Possibility to check, if binder is available is not necessary for outside usage besides `CompositeBinder` class, so this interface can be split and implemented only by specific classes. Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com> --- src/Binding/Binder.php | 2 -- src/Binding/Binder/CallableBinder.php | 16 +++++++--------- src/Binding/Binder/CompositeBinder.php | 10 ---------- src/Binding/Binder/HookableBinder.php | 8 +++----- src/Binding/Binder/StoppableBinder.php | 4 ++-- src/Binding/ComposableBinder.php | 13 +++++++++++++ ...rayBindingLoader.php => ArrayDefinitions.php} | 0 7 files changed, 25 insertions(+), 28 deletions(-) create mode 100644 src/Binding/ComposableBinder.php rename src/Binding/Loader/{ArrayBindingLoader.php => ArrayDefinitions.php} (100%) diff --git a/src/Binding/Binder.php b/src/Binding/Binder.php index 3997c59..0dc334f 100644 --- a/src/Binding/Binder.php +++ b/src/Binding/Binder.php @@ -6,7 +6,5 @@ namespace WPDesk\Init\Binding; interface Binder { - public function can_bind( Definition $def ): bool; - public function bind( Definition $def ): void; } diff --git a/src/Binding/Binder/CallableBinder.php b/src/Binding/Binder/CallableBinder.php index f0561b5..7085800 100644 --- a/src/Binding/Binder/CallableBinder.php +++ b/src/Binding/Binder/CallableBinder.php @@ -5,11 +5,11 @@ declare(strict_types=1); namespace WPDesk\Init\Binding\Binder; use Psr\Container\ContainerInterface; -use WPDesk\Init\Binding\Binder; +use WPDesk\Init\Binding\ComposableBinder; use WPDesk\Init\Binding\Definition; use WPDesk\Init\Binding\Definition\CallableDefinition; -class CallableBinder implements Binder { +class CallableBinder implements ComposableBinder { /** @var ContainerInterface */ private $container; @@ -23,13 +23,11 @@ class CallableBinder implements Binder { } public function bind( Definition $def ): void { - if ( $def instanceof CallableDefinition ) { - $ref = new \ReflectionFunction( $def->value() ); - $parameters = []; - foreach ( $ref->getParameters() as $ref_param ) { - $parameters[] = $this->container->get( $ref_param->getType()->getName() ); - } - $ref->invokeArgs( $parameters ); + $ref = new \ReflectionFunction( $def->value() ); + $parameters = []; + foreach ( $ref->getParameters() as $ref_param ) { + $parameters[] = $this->container->get( $ref_param->getType()->getName() ); } + $ref->invokeArgs( $parameters ); } } diff --git a/src/Binding/Binder/CompositeBinder.php b/src/Binding/Binder/CompositeBinder.php index 569b3fc..8b88634 100644 --- a/src/Binding/Binder/CompositeBinder.php +++ b/src/Binding/Binder/CompositeBinder.php @@ -21,16 +21,6 @@ final class CompositeBinder implements Binder { $this->binders[] = $binder; } - public function can_bind( Definition $def ): bool { - foreach ( $this->binders as $binder ) { - if ( $binder->can_bind( $def ) ) { - return true; - } - } - - return false; - } - public function bind( Definition $def ): void { foreach ( $this->binders as $binder ) { if ( $binder->can_bind( $def ) ) { diff --git a/src/Binding/Binder/HookableBinder.php b/src/Binding/Binder/HookableBinder.php index c0d7a7a..f8426da 100644 --- a/src/Binding/Binder/HookableBinder.php +++ b/src/Binding/Binder/HookableBinder.php @@ -5,11 +5,11 @@ declare(strict_types=1); namespace WPDesk\Init\Binding\Binder; use Psr\Container\ContainerInterface; -use WPDesk\Init\Binding\Binder; +use WPDesk\Init\Binding\ComposableBinder; use WPDesk\Init\Binding\Definition; use WPDesk\Init\Binding\Definition\HookableDefinition; -class HookableBinder implements Binder { +class HookableBinder implements ComposableBinder { /** @var ContainerInterface */ private $container; @@ -23,8 +23,6 @@ class HookableBinder implements Binder { } public function bind( Definition $def ): void { - if ( $def instanceof HookableDefinition ) { - $this->container->get( $def->value() )->hooks(); - } + $this->container->get( $def->value() )->hooks(); } } diff --git a/src/Binding/Binder/StoppableBinder.php b/src/Binding/Binder/StoppableBinder.php index 3b15700..e74c7e0 100644 --- a/src/Binding/Binder/StoppableBinder.php +++ b/src/Binding/Binder/StoppableBinder.php @@ -5,12 +5,12 @@ declare(strict_types=1); namespace WPDesk\Init\Binding\Binder; use Psr\Container\ContainerInterface; -use WPDesk\Init\Binding\Binder; +use WPDesk\Init\Binding\ComposableBinder; use WPDesk\Init\Binding\StoppableBinder as Stop; use WPDesk\Init\Binding\Definition; use WPDesk\Init\Binding\Definition\HookableDefinition; -class StoppableBinder implements Binder { +class StoppableBinder implements ComposableBinder { /** @var ContainerInterface */ private $container; diff --git a/src/Binding/ComposableBinder.php b/src/Binding/ComposableBinder.php new file mode 100644 index 0000000..8498244 --- /dev/null +++ b/src/Binding/ComposableBinder.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); + +namespace WPDesk\Init\Binding; + +/** + * Can be composed with other binders within {@see CompositeBinder} class. + */ +interface ComposableBinder extends Binder { + + public function can_bind( Definition $def ): bool; +} diff --git a/src/Binding/Loader/ArrayBindingLoader.php b/src/Binding/Loader/ArrayDefinitions.php similarity index 100% rename from src/Binding/Loader/ArrayBindingLoader.php rename to src/Binding/Loader/ArrayDefinitions.php -- GitLab