- array_map: documentation ( source)
<?php
class Request
{
public function hello()
{
return 'hello ';
}
}
class App
{
public function name()
{
return 'the app';
}
public function response(Request $req, App $app)
{
return $req->hello().$app->name();
}
}
//依赖查找 or 自动依赖注入
$c['App'] = new App;
$c['Request'] = new Request;
$r = new ReflectionMethod('App', 'response');
$params = $r->getParameters();
$params = array_map(function($p) use ($c) {
$className = $p->getClass()->name;
return $c[$className]??null;
}, $params);
$res = $r->invokeArgs($c['App'], $params);
//手动依赖注入
$app = new App;
$req = new Request;
$res = $app->response($req, $app);