多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
##PHPSTART 命名空间 http://phpstart.xyz/group1/dog/talk 控制器部分代码: ~~~ class Dog{ public function __construct() { } function talk(){ $dog = C('Dog'); $dog->talk(); } } ~~~ 上面的控制器类名是 Dog,C('Dog')引入的文件也会定义一个 class Dog,这里就会造成class重定义错误。 解决类库与控制器类重命名冲突的办法有3个: **一、在 xxx.class.php 文件第一行加上默认空间名字__Class** <font color=red>请注意大小写,这里是2个下划线,理解成文件夹名就比较容易记住</font> ~~~ namespace __Class; class xxx{ } ~~~ <font color=red>非全局空间使用全局空间的类,请带上完全限定空间名 全局空间的写缓存是:PS:putCache() 非全局空间的写缓存是:\PS:putCache() (全局变量和函数不需要加限定空间名)</font> **二、在 xxx.class.php 的类名加上 _class 后缀** <font color=red>请注意大小写,这里是1个下划线,理解成文件后缀名就比较容易记住</font> ~~~ class xxx_class{ } ~~~ 上面2个方法不改变类的加载规则 ~~~ C('xxx'); ~~~ 系统会自动优先实例化名字空间的类 > 再实例化后缀形式的类 > 再实例化全局空间的类 **三、第3种方法与第1种方法一样,但可以自定义空间名字,加载的时候需要带上空间名字** 类的定义: ~~~ namespace animals; class bird{ } ~~~ 类的加载 ~~~ C('animals/xxx'); ~~~ * * * * * 模型与控制器的名字重复冲突也是很容易遇到的,解决冲突方法与类库的方法相似,只是默认空间名字和后缀不一样。 模型的空间名字 ~~~ namespace __Model; class xxx{ ... } ~~~ 模型的后缀 ~~~ class xxx_mod{ ... } ~~~ * * * * * **控制器也可以使用命名空间** 控制器空间名字规则:使用控制器的目录(相对与程序目录) 例子: http://phpstart.xyz/test/group2/index/dog http://phpstart.xyz/group2/index/dog 对应文件:/test/<font color=red>group2</font>/index.php 空间名字:<font color=red>group2</font> 例子2: http://phpstart.xyz/test/group2/class1/index/dog http://phpstart.xyz/group2/class1/index/dog 对应文件:/test/<font color=red>group2/class1</font>/index.php 空间名字:<font color=red>group2\class1</font> <font color=red>名字空间使用全局变量和函数是没有书写要求的,但是名字空间内不会自动搜索全局空间的类,所以要使用全局空间的类,需要带上完全限定名</font> ~~~ \PS::putCache(); ~~~