关于php命名空间的实战测试
在写php 程序是有时候会遇到下面这样的错误: (你的类重复定义了); 这时我们就需要命名空间的帮助.
但是这个命名空间和c++的命名空间有一些不同, 我在测试的过程中就遇到一些问题,我把这些问题一一列出来以免以后重蹈覆辙.
这是我文件的目录结构 : ns_test下有一个文件夹和 两个 文件, 在folder下还有一个class3.php的文件
下面是class1.php中的代码:
<span style="font-size:12px;"><? namespace ns1\s1; //使用命名空间ns1\s1 下面的所有类都在该命名空间中 $path= dirname(__FILE__)."/"; //获得文件所在的文件夹路径 $path=str_replace('\\','/',$path); //echo $path."class1.php"."<br>"; require_once($path."folder/class3.php"); class c1{ function say() { echo "命名空间:ns1\s1: c1 say()<br>"; } } class comm_cls{ function say() { echo "命名空间:ns1\s1: comm_cls say() <br>"; } } function test() { echo "命名空间:ns1\s1 :test() <br>"; } ?></span>下面是class2.php中的代码:
<span style="font-size:12px;"><? header("Content-type: text/html; charset=utf-8"); //namespace ns1\s1; //有重复的类 在开始声明命名空间的话 该文件下面的所有类和函数就都属于该命名空间 //不声明命名空间 默认就是全局的 $path= dirname(__FILE__)."/"; //获得文件所在的文件夹路径 $path=str_replace('\\','/',$path); //echo $path."class1.php"."<br>"; require_once($path."class1.php"); class c2{ function say() { echo "全局 :c2 say() <br>"; } } // 有命名空间的隔离就可以在不同的命名空间中定义相同的类名的类 class comm_cls{ function say() { echo "全局: comm_cls say() <br>"; } } use ns1\s1 as s2; //定义别名 $t1=new ns1\s1\c1(); //使用完整的命名空间 $t1->say(); s2\test(); $t3=new s2\comm_cls(); //使用命名空间的别名 $t3->say(); $t5=new s2\c3(); $t5->say(); // \s2\test();写法有问题 即在s2前加'\'有问题 $t2=new c2(); $t2->say(); $t4=new comm_cls(); $t4->say(); //namespace ns1\s1; 命名空间应该在代码的最开始声明 ?></span>
下面是class3.php中的代码:
<span style="font-size:12px;"><? namespace ns1\s1; //使用和class1.php 中一样的命名空间 class c3{ function say() { echo "命名空间:nsa\s1: c3 say()<br>"; } } //如果定义下面的类的话 就会出现重定义错误 // class comm_cls{ // function say() // { // echo "s1: c2 say() <br>"; // } // } // function test() // { // echo "s1 :test() <br>"; // } ?></span>
测试 : 在浏览器中打开class2.php
实际使用
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。