用命名空间解决brophp中的反复调用model类的bug
程序员文章站
2024-04-05 23:02:01
...
用命名空间解决brophp中的重复调用model类的bug
第一个项目完成了,虽然说自己很不满意这个项目,但是无论如何,还是结束了。
因为自己小有基础,而且不想用纯面向过程和oop来做项目,所以第一个项目打算用框架来做
于是在项目前研究brophp代码,在brophp基础上做了一个“自己”的框架
说是自己的,其实只是自己看懂了brophp,对照这brophp重写了一遍而已。
这个bug就是自己在项目中偶然发现的。
当时我在前台的common.class.php调用了D(‘user','admin‘)对用户权限进行了验证,然后在另外一个控制器里面又使用D(‘user')对用户数据进行更新
这样就出错了 提示不能重复定义UserModel类,这是调用了2个相同名字的类产生的问题
正如我们给类命名不能用memcache,mysqli一样
当时赶项目,时间紧,没敢深想,只是考虑了下比较容易解决办法:对这两个类都进行改名 加上项目名。
项目完,堕落了两天,今天晚上又想起了这个问题,仔细思考了一下,突然想起来php5.3新加的命名空间就是为解决此类问题而增加的
翻了下手册,研究了下这个新东西,确实解决了这个问题
在生成对于model编译文件的时候头部加上命名空间定义
如home的UserModel.php
再修改D方法 使模型实例化的的时候用以下的形式
第一个项目完成了,虽然说自己很不满意这个项目,但是无论如何,还是结束了。
因为自己小有基础,而且不想用纯面向过程和oop来做项目,所以第一个项目打算用框架来做
于是在项目前研究brophp代码,在brophp基础上做了一个“自己”的框架
说是自己的,其实只是自己看懂了brophp,对照这brophp重写了一遍而已。
这个bug就是自己在项目中偶然发现的。
当时我在前台的common.class.php调用了D(‘user','admin‘)对用户权限进行了验证,然后在另外一个控制器里面又使用D(‘user')对用户数据进行更新
这样就出错了 提示不能重复定义UserModel类,这是调用了2个相同名字的类产生的问题
正如我们给类命名不能用memcache,mysqli一样
当时赶项目,时间紧,没敢深想,只是考虑了下比较容易解决办法:对这两个类都进行改名 加上项目名。
项目完,堕落了两天,今天晚上又想起了这个问题,仔细思考了一下,突然想起来php5.3新加的命名空间就是为解决此类问题而增加的
翻了下手册,研究了下这个新东西,确实解决了这个问题
在生成对于model编译文件的时候头部加上命名空间定义
如home的UserModel.php
- namespace home;
- class UserModel extends \Dpdo {
- }
- namespace admin;
- class UserModel extends \Dpdo {
- }
再修改D方法 使模型实例化的的时候用以下的形式
- $h = new home\UserModel();
- $a = new admin\UserModel();
这样就解决了这个重复调用类的问题。
具体代码就不发了,有兴趣的童鞋可以试下
其实最简单的方法就是实例化的时候统一,比如都用D(‘user','admin‘),就不会出现这个问题
但是这是逃避问题,而不是解决问题。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
- 最新文章
- 热门排行
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论