Dependency injection is automatically completed by the container. With reflection mechanism, independent dependency injection can be realized. modifyRrequest
Class is constructed as follows
namespace think;
class Request
{
public function __construct(App $app, $name)
{
var_dump($app instanceof App, $name);
}
}
At the same timebindParams()
Method, withgetClass()
Method to get the parameter type promptgetName()
Method to get the class name of the created instance.
protected function bindParams(ReflectionFunctionAbstract $reflect, array $vars = []): array
{
//If the class has no configuration parameters, it returns an empty array directly
if ($reflect->getNumberOfParameters() == 0) {
return [];
}
$args = [];
//Get parameter information
$params = $reflect->getParameters();
foreach ($params as $param) {
$name = $param->getName();
$class = $param->getClass();
if (isset($vars[$name])) {
$args[] = $vars[$name];
//If no parameters are passed, the default parameters are used
} elseif ($param->isDefaultValueAvailable()) {
$args[] = $param->getDefaultValue();
//If the parameter type is obtained, further instantiation is implemented
} elseif ($class) {
$args[] = $this->make($class->getName());
}
}
visitdiy.tp
, successfully printed out
bool(true) string(4) "five"
It indicates that the dependency injection is realized successfully by reflection, and then it is deletedRequest
Class for future demonstration.
This work adoptsCC agreementReprint must indicate the author and the link of this article