zoukankan      html  css  js  c++  java
  • PHP命名空间 namespace 及导入 use 的用法

    命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。

    在PHP中,出现同名函数或是同名类是不被允许的。为防止编程人员在项目中定义的类名或函数名出现重复冲突,在PHP5.3中引入了命名空间这一概念。

    1.命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突。一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码。内容空间声明后的代码便属于这个命名空间,例如:

    <?php
        echo 111;       //由于namespace前有代码而报错
        namespace Teacher;
        class Person{
            function __construct(){
                echo 'Please study!';
            }
        }

    2.调用不同空间内类或方法需写明命名空间。例如:

    <?php
        namespace Teacher;
        class Person{
            function __construct(){
                echo 'Please study!<br/>';
            }
        }
        function Person(){
            return 'You must stay here!';
        };
        namespace Student;
        class Person{
            function __construct(){
                echo 'I want to play!<br/>';
            }
        }
        new Person();                    //本空间(Student空间)
        new TeacherPerson();           //Teacher空间
        new StudentPerson();           //Student空间
        echo TeacherPerson();          //Teacher空间下Person函数
        //输出:
        I want to play!
        Please study!
        I want to play!
        You must stay here

    3.在命名空间内引入其他文件不会属于本命名空间,而属于公共空间或是文件中本身定义的命名空间。例:

    首先定义一个1.php和2.php文件:

    <?php     //1.php
    class Person{
        function __construct(){
                echo 'I am one!<br/>';
            }
    }
    <?php
    namespace Newer;
    require_once './1.php';
    new Person();      //报错,找不到Person;
    new Person();     //输出 I am tow!;
    <?php     //2.php
    namespace Two
    class Person{
        function __construct(){
                echo 'I am tow!<br/>';
            }
    }
    <?php
    namespace New;
    require_once './2.php';
    new Person();      //报错,(当前空间)找不到Person;
    new Person();     //报错,(公共空间)找不到Person;
    new TwoPerson();  //输出 I am tow!;

    4.下面我们来看use的使用方法:(use以后引用可简写)

        namespace SchoolParents;
        class Man{
            function __construct(){
                echo 'Listen to teachers!<br/>';
            }
        }
        namespace SchoolTeacher;
        class Person{
            function __construct(){
                echo 'Please study!<br/>';
            }
        }
        namespace SchoolStudent;
        class Person{
            function __construct(){
                echo 'I want to play!<br/>';
            }
        }
        new Person();                   //输出I want to play!
        new SchoolTeacherPerson();   //输出Please study!
        new TeacherPerson();           //报错
        ----------
        use SchoolTeacher;  
        new TeacherPerson();           //输出Please study!    
        ----------
        use SchoolTeacher as Tc;  
        new TcPerson();           //输出Please study!  
        ----------
        use SchoolTeacherPerson; 
        new Person();           //报错
        ----------
        use SchoolParentMan; 
        new Man();           //报错
  • 相关阅读:
    Navicat连接mysql提示1251解决方案
    js获取select下拉框选中的值
    Windows下安装Mysql数据库
    ASP.NET MVC API以及.Core API进行安全拦截和API请求频率控制
    myeclipse 10.7中文破解版 下载安装看着一篇就够了
    Runtime exception at 0x004000bc: invalid integer input (syscall 5)
    MARS(MIPS汇编程序和运行时模拟器)
    如何将本地的代码上传到github
    JavaWeb基础
    大学什么时候开学?这款小程序告诉你!
  • 原文地址:https://www.cnblogs.com/beili/p/8670418.html
Copyright © 2011-2022 走看看