<?php
spl_autoload_register(function ($class) {
$class = str_replace('\\', '/', $class);
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
});
use vendor\container;
use vendor\request;
container::bind('vendor\\request', function () {
return new request();
});
$request = container::get('vendor\\request');
$s = explode('/', $request->get('s'));
$controller = '\\controller\\' . ucfirst($s[1]) . 'Controller';
$action = lcfirst($s[2]) . 'Action';
$instance = new $controller();
try {
$reflect = new ReflectionMethod($instance, $action);
} catch (ReflectionException $e) {
}
$params = $reflect->getParameters();
$args = [];
foreach ($params as $param) {
$reflectionName = $param->getName();
$reflectionType = $param->getType();
$type_name = $reflectionType->getName();
if (container::has($type_name)) {
$args[] = new $type_name();
} else {
$args[] = $request->get($reflectionName);
}
}
try {
return $reflect->invokeArgs($instance, $args);
} catch (ReflectionException $e) {
}
注入request
<?php
namespace controller;
use vendor\request;
class UserController
{
public function showAction(request $request, string $b)
{
echo $request->get("a");
echo "<br />";
echo $b;
}
}