·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

php反射完整运用例子

206 0
发表于 2023-5-19 10:19:57 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. <?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();
复制代码
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.17.80.96,GMT+8, 2024-11-9 09:55 , Processed in 0.399849 second(s), 76 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表