马上注册,免费下载更多dz插件网资源。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- <?php// 数据库类class Database { private $username; private $password; public function __construct($username, $password) { $this->username = $username; $this->password = $password; } public function connect() { // 连接数据库 }}// 用户类,需要依赖于数据库类class User { private $database; // 构造函数,需要传入一个数据库实例 public function __construct(Database $database) { $this->database = $database; } // 执行查询,需要使用数据库实例 public function read() { $this->database->connect(); // 执行查询 }}// 反射依赖注入类class ReflectionInjector { // 依赖注入方法,需要传入一个类名和一个参数包 public function inject($class, $arguments = []) { // 反射类 $reflector = new ReflectionClass($class); // 获取构造函数 $constructor = $reflector->getConstructor(); // 获取构造函数参数 $parameters = $constructor->getParameters(); // 构造参数数组 $dependencies = []; foreach ($parameters as $parameter) { // 获取参数类型 $dependency = $parameter->getType()->getName(); // 如果参数是一个类,执行依赖注入记过 if (class_exists($dependency)) { $dependencies[$parameter->getPosition()] = $this->inject($dependency); } else if (array_key_exists($parameter->getPosition(), $arguments)) { $dependencies[$parameter->getPosition()] = $arguments[$parameter->getPosition()]; } else if ($parameter->isDefaultValueAvailable()) { $dependencies[$parameter->getPosition()] = $parameter->getDefaultValue(); } else { throw new Exception('Cannot resolve dependency: ' . $dependency); } } // 利用反射机制实例化一个新的对象 return $reflector->newInstanceArgs($dependencies); }}// 实例化反射依赖注入类$injector = new ReflectionInjector();// 通过反射依赖注入实例化用户对象$user = $injector->inject('User', [new Database('username', 'password')]);// 执行用户读操作$user->read();
复制代码
©DZ插件网所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 网站部分内容来源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,得到更好的正版服务。 您在本站任何的赞助购买、下载、查阅、回复等行为等均表示接受并同意签订《DZ插件网免责声明协议》。 如有侵权请邮件与我们联系处理: discuzaddons@vip.qq.com 并出示相关证明以便删除。敬请谅解!
|
|