wp_back/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php

73 lines
2.1 KiB
PHP
Raw Normal View History

2024-05-20 15:37:46 +03:00
<?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( $name, ContainerInterface $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 = 1 ) {
if ( ! \array_key_exists( $name, self::$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;
}
}
}
}