• File: container-registry.php
  • Full Path: /home/matthif/www/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php
  • Date Modified: 02/24/2024 11:29 PM
  • File size: 2.08 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace Yoast\WP\Lib\Dependency_Injection;

use 
YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface;
use 
YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;

/**
 * Container_Registry class.
 */
class Container_Registry {

    
/**
     * The registered containers.
     *
     * @var ContainerInterface[]
     */
    
private static $containers = [];

    
/**
     * Register a container.
     *
     * @param string             $name      The name of the container.
     * @param ContainerInterface $container The container.
     *
     * @return void
     */
    
public static function register$nameContainerInterface $container ) {
        
self::$containers$name ] = $container;
    }

    
// phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber -- PHPCS doesn't take into account exceptions thrown in called methods.

    /**
     * Get an instance from a specific container.
     *
     * @param string $name              The name of the container.
     * @param string $id                The ID of the service.
     * @param int    $invalid_behaviour The behaviour when the service could not be found.
     *
     * @return object|null The service.
     *
     * @throws ServiceCircularReferenceException When a circular reference is detected.
     * @throws ServiceNotFoundException          When the service is not defined.
     */
    
public static function get$name$id$invalid_behaviour ) {
        if ( ! 
\array_key_exists$nameself::$containers ) ) {
            if ( 
$invalid_behaviour === ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE ) {
                throw new 
ServiceNotFoundException$id );
            }
            return 
null;
        }
        return 
self::$containers$name ]->get$id$invalid_behaviour );
    }

    
// phpcs:enable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber

    /**
     * Attempts to find a given service ID in all registered containers.
     *
     * @param string $id The service ID.
     *
     * @return string|null The name of the container if the service was found.
     */
    
public static function find$id ) {
        foreach ( 
self::$containers as $name => $container ) {
            if ( 
$container->has$id ) ) {
                return 
$name;
            }
        }
    }
}