Skip to content
Snippets Groups Projects
Select Git revision
  • f5f938249c4d93eab4a535b4941a6602181cc06a
  • master default protected
  • fix/deprecated_functions
  • devel
  • feat/translations
  • feat/upgrade_to_pro_url
  • feat/lang
  • bugfix/require-interface
  • bugfix/require-once-error
  • feature/activation-hooks
  • feature/template-loader
  • feature/template-renderer
  • feature/plugin-activation
  • feature/hookable-object
  • feature/builder-pattern
  • 2.1.2
  • 2.1.1
  • 2.1.0
  • 2.0.0
  • 2.0.0-beta1
  • 1.4.4
  • 1.4.3
  • 1.4.2
  • 1.4.1
  • 1.4
  • 1.3.3
  • 1.3.2
  • 1.3.1
  • 1.3.0
  • 1.2.0
  • 1.1
  • 1.0
32 results

CHANGELOG.md

Blame
  • To find the state of this project's repository at the time of any of these versions, check out the tags.
    StoppableBinder.php 1.12 KiB
    <?php
    
    declare(strict_types=1);
    
    namespace WPDesk\Init\Binding\Binder;
    
    use Psr\Container\ContainerInterface;
    use WPDesk\Init\Binding\Binder;
    use WPDesk\Init\Binding\StoppableBinder as Stop;
    use WPDesk\Init\Binding\Definition;
    use WPDesk\Init\Binding\Definition\HookableDefinition;
    
    class StoppableBinder implements Binder {
    
    	/** @var ContainerInterface */
    	private $container;
    
    	/** @var Binder */
    	private $binder;
    
    	private $should_stop = false;
    
    	public function __construct( Binder $b, ContainerInterface $c ) {
    		$this->binder    = $b;
    		$this->container = $c;
    	}
    
    	public function can_bind( Definition $def ): bool {
    		return $this->binder->can_bind( $def );
    	}
    
    	public function bind( Definition $def ): void {
    		if ( $this->should_stop === true ) {
    			return;
    		}
    
    		$this->binder->bind( $def );
    
    		if ( $this->can_be_stoppable( $def ) ) {
    			$binding = $this->container->get( $def->value() );
    			if ( $binding instanceof Stop && $binding->should_stop() ) {
    				$this->should_stop = true;
    			}
    		}
    	}
    
    	private function can_be_stoppable( Definition $def ): bool {
    		return is_string( $def->value() ) && class_exists( $def->value() );
    	}
    
    }