<p>其实纠结了很久要不要使用这个东西,但是看看了最新的框架laravel,cakephp等等的新版本都使用上了,所以还是随大流顺便学习下。</p><p>namespace和c++里面的概念差不多,只是用法有点差别。</p><p>首先,如果我在index.php文件中想使用db/mysql.php这个文件里的mysql这个类。</p><p>使用方法如下:</p><p>mysql.php文件:</p><pre class="brush:php;toolbar:false">namespaceDB; classMysql { publicfunctionindex(){ echo&#39;immysql&#39;; } }</pre><pre class="brush:php;toolbar:false">index.php文件 namespacetest;//声明当前文件为test命名空间下。 useDB\Mysql;//使用db命名空间下的mysql类,仅仅useDB;是不行的。!!!! include&#39;db/mysql.php&#39;;//引入mysql.php这个文件。 $obj=newMysql();//这样就可以用了。</pre><p></p><p>OK,继续,如果不想用use xxxx,也可以直接$obj = new \DB\Mysql();前提是也要include mysql.php这个文件。这里有个细微差别。</p><p>$obj = new Mysql();     //首先在当前空间找,如果没有,再从公共区域查找mysql类.(这里的公共区域是指没有被命名空间包含的代码以及系统函数)</p><p>$obj = new DB\Mysql();    //从当前空间(这里假如是test)下的DB空间里 查找mysql类。(符合此要求的mysql声明为namespace test\DB)</p><p>$obj = new \DB\Mysql();   //从命名空间根部查找DB空间的mysql类。</p><p>注意:</p><p>其实对于没有用命名空间的项目来说,所有的class都是默认在\这个命名空间下的。所以在这种项目里面new aaa()和new \aaa()效果一样。</p><p>当有命名空间的项目,引入一个没有命名空间的文件A.php时,应该用new \A()来实例化,如果不用\,会在当前文件的NS下查找class A,是找不到的。</p><pre class="brush:php;toolbar:false">namespaceElfFramework\View; classCoreView { function__construct() { requireELF_PATH.&#39;Vendor/Smarty/Libs/Smarty.class.php&#39;; $obj=new\Smarty();//Smarty.class.php文件没有用NS,如果这行用newSmarty(),系统会在NS为ElfFramework\View\下找类名为Smarty的文件,是找不到的。 } }</pre>
返回顶部 留言