在swoole中制作一款仿制laravel的框架 首先需要确定一下思路:我希望基于swoole的扩展开发的代码在run起来的时候,在接收到ws或是tcp等消息时,自动路由到某个类上,同时类可以实现加载类的依赖注入功能。目前市面上占据主流的一款框架Laravel,其中有一个依赖注入的功能非常的便捷。一般在通常的框架中拉取Class是这样做的:
class a {
public $bClassInstance;
public function __construct(Class b) {
$classInstance = new b();
}
public function doSth() {
return $this->bClassInstance->xxx();
}
}
$b = new b();
$a = new a($b)
$a->doSth();
而在Laravel中则可以省略一些实例化的步骤, 直接通过类型约束的语法在方法的形参上指定某类的命名空间就自动实例化该类进来了。
class a {
public function doSth(b $b) {
return $b->xxx();
}
}
想要实现这一点,必须要了解php的反射机制。反射是一个比较冷门的类,他可以做到:使用namespace实例化一个类、调用类的方法等,利用这一点,可以构造一个自动装箱的类。
<?php
/***
* 依赖注入容器,若要执行依赖注入,请确保类包含构造函数!
*/
namespace App\Server;
class Container
{
public $config;
public $reflection;
public function __construct