位置 : 首页 > 经验分享 > PHP教程 > php namespace用法

php namespace用法

时间:2018-05-18   收藏
其实对于没有用命名空间的项目来说,所有的class都是默认在\这个命名空间下的。所以在这种项目里面new aaa()和new \aaa()效果一样。 当有命名空间的项目,引入一个没有命名空间的文件A.php时,应该用new \A()来实例化,如果不用\,会在当前文件的NS下查找class A,是找不到的

其实纠结了很久要不要使用这个东西,但是看看了最新的框架laravel,cakephp等等的新版本都使用上了,所以还是随大流顺便学习下。

namespace和c++里面的概念差不多,只是用法有点差别。

首先,如果我在index.php文件中想使用db/mysql.php这个文件里的mysql这个类。

使用方法如下:

mysql.php文件:

namespace DB;
class Mysql
{    
    public function index(){
        echo 'im mysql';
    }
}
index.php文件
namespace test;  //  声明当前文件为test命名空间下。
use DBMysql;    //使用db命名空间下的mysql类,仅仅use DB;是不行的。!!!!
include 'db/mysql.php';   //引入mysql.php这个文件。
$obj = new Mysql();  //这样就可以用了。


 


OK,继续,如果不想用use xxxx,也可以直接$obj = new DBMysql();前提是也要include mysql.php这个文件。这里有个细微差别。

$obj = new Mysql();     //首先在当前空间找,如果没有,再从公共区域查找mysql类.(这里的公共区域是指没有被命名空间包含的代码以及系统函数)

$obj = new DBMysql();    //从当前空间(这里假如是test)下的DB空间里 查找mysql类。(符合此要求的mysql声明为namespace testDB)

$obj = new DBMysql();   //从命名空间根部查找DB空间的mysql类。 


注意:

其实对于没有用命名空间的项目来说,所有的class都是默认在这个命名空间下的。所以在这种项目里面new aaa()和new aaa()效果一样。

当有命名空间的项目,引入一个没有命名空间的文件A.php时,应该用new A()来实例化,如果不用,会在当前文件的NS下查找class A,是找不到的。



namespace ElfFrameworkView;

class CoreView
{
    function __construct()
    {
        require ELF_PATH . 'Vendor/Smarty/Libs/Smarty.class.php';
        $obj = new Smarty(); //Smarty.class.php文件没有用NS,如果这行用new Smarty(),系统会在NS为ElfFrameworkView下找类名为Smarty的文件,是找不到的。

    }
}


keywords: php namespace 用法


    浏览排行榜
    最新文字信息
返回顶部 关注新浪微博 关注腾讯微博