Automattic\WooCommerce\Internal\DependencyManagement

AbstractServiceProvider::add_with_auto_arguments()protectedWC 1.0

Register a class in the container and use reflection to guess the injection method arguments.

WARNING: this method uses reflection, so please have performance in mind when using it.

Метод класса: AbstractServiceProvider{}

Хуков нет.

Возвращает

DefinitionInterface. The generated container definition.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->add_with_auto_arguments( $class_name, $concrete, $shared ) : DefinitionInterface;
$class_name(строка) (обязательный)
Class name to register.
$concrete(разное)
The concrete to register. Can be a shared instance, a factory callback, or a class name.
По умолчанию: null
$shared(true|false)
Whether to register the class as shared (get always returns the same instance) or not.
По умолчанию: false

Код AbstractServiceProvider::add_with_auto_arguments() WC 9.3.3

protected function add_with_auto_arguments( string $class_name, $concrete = null, bool $shared = false ) : DefinitionInterface {
	$definition = new Definition( $class_name, $concrete );

	$function = $this->reflect_class_or_callable( $class_name, $concrete );

	if ( ! is_null( $function ) ) {
		$arguments = $function->getParameters();
		foreach ( $arguments as $argument ) {
			if ( $argument->isDefaultValueAvailable() ) {
				$default_value = $argument->getDefaultValue();
				$definition->addArgument( new RawArgument( $default_value ) );
			} else {
				$argument_class = $this->get_class( $argument );
				if ( is_null( $argument_class ) ) {
					throw new ContainerException( "Argument '{$argument->getName()}' of class '$class_name' doesn't have a type hint or has one that doesn't specify a class." );
				}

				$definition->addArgument( $argument_class->name );
			}
		}
	}

	// Register the definition only after being sure that no exception will be thrown.
	$this->getContainer()->add( $definition->getAlias(), $definition, $shared );

	return $definition;
}