Automattic\WooCommerce\Internal\DependencyManagement
AbstractServiceProvider::add_with_auto_arguments()
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() 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; }