反射+IOC

<?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;
   }
}

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注