• php namespace用法


    其实纠结了很久要不要使用这个东西,但是看看了最新的框架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,是找不到的。

    eg:

    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的文件,是找不到的。
    
        }
    }
  • 相关阅读:
    303. Range Sum Query
    302. Smallest Rectangle Enclosing Black Pixels
    301. Remove Invalid Parentheses
    The Swift.org Blog Welcome
    About Swift
    Swift is Open Source
    Swift is Now Open Source
    加快Terminal的打开加载速度
    加快Terminal的打开加载速度
    [note]What I’ve learnt from working on startups
  • 原文地址:https://www.cnblogs.com/alazalazalaz/p/5758369.html
Copyright © 2020-2023  润新知