用命名空间解决brophp中的反复调用model类的bug

WBOY
풀어 주다: 2016-06-13 13:26:47
원래의
878명이 탐색했습니다.

用命名空间解决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

  1. namespace home;
  2. class UserModel extends \Dpdo {
  3. }
admin的Usermodel.php
  1. namespace admin;
  2. class UserModel extends \Dpdo {
  3. }
注意Dpdo前面的\ ,因为其他文件没有定义命名空间,所以属于全局空间“如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀\ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。 ”

再修改D方法 使模型实例化的的时候用以下的形式
  1. $h = new home\UserModel();
  2. $a = new admin\UserModel();


这样就解决了这个重复调用类的问题。
具体代码就不发了,有兴趣的童鞋可以试下
其实最简单的方法就是实例化的时候统一,比如都用D(‘user','admin‘),就不会出现这个问题
但是这是逃避问题,而不是解决问题。


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!