关于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

技术分享

实际使用

技术分享








郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。