您的位置:68399皇家赌场 > 集群主机 > PHP命名空间的用途和namespace关键字

PHP命名空间的用途和namespace关键字

发布时间:2019-07-28 06:52编辑:集群主机浏览(188)

    myapp3.php

    3.字符串AppLib1MyClass被传送给__autoload函数,使用文件路线正斜线替换全体命名空间中的反斜线,然后修改字符串,classesAppLib1MyClass.php文件被电动载入;

    1. < ?php  
    2. use AppLib1 as L;  
    3. use AppLib2MyClass as Obj;  
    4.  
    5. header('Content-type: text/plain');  
    6. require_once('lib1.php');  
    7. require_once('lib2.php');  
    8.  
    9. echo LMYCONST . " ";  
    10. echo LMyFunction() . " ";  
    11. echo LMyClass::WhoAmI() . " ";  
    12. echo Obj::WhoAmI() . " ";  
    13. ?>  

    你只怕感兴趣的小说:

    • thinkphp autoload 命名空间自定义 namespace
    • PHP中的命名空间详细介绍
    • PHP命名空间(namespace)的动态访谈及采用才能
    • PHP命名空间(namespace)的施用基础及示范
    • PHP命名空间(Namespace)简明教程
    • PHP关键脾气之命名空间实例详解

    在平等的命名空间内专业

    留神怀想下面包车型大巴代码:

     

    new DE()的解析:
    在类名称前边加上圈套前定名空间名称改成:ABDE,然后寻找该类。
    尝试自动装载类 ABDE。

    ◆限定称号(Qualified name)

    /classes/App/Lib1/MyClass.php

    < ?php  namespace AppLib1;   require_once('lib1.php');  require_once('lib2.php');   header('Content-type: text/plain');  echo MYCONST . "
    ";  echo MyFunction() . "
    ";  echo MyClass::WhoAmI() . "
    ";  ?>  

    Example 名称分析示例

    能够运用use操作符导入命名空间,如:

    myapp3.php

    PHP命名空间高等天性

    在同二个文书中定义四个命名空间:在同一个文本中声称八个命名空间有两种艺术,但是在其实编制程序实施中,特别不提倡在同贰个文书中定义多戈命名空间。这种艺术的至关重大用于将多个PHP 脚本合併在同二个文书中。上边列出第一种艺术。

    紧密斟酌下边的代码:

    PHP标志符名称使用下列命名空间法则进行分析,请参见PHP用户手册驾驭更详尽的消息:

    ◆完全限定名称(Fully-qualified name)

    复制代码 代码如下:

    1. AppLib1MYCONST  
    2. AppLib1MyFunction  
    3. AppLib1MyClass::WhoAmI  
    4. AppLib2MyClass::WhoAmI  

    AppLib1MYCONST  AppLib1MyFunction  AppLib1MyClass::WhoAmI  AppLib2MyClass::WhoAmI  PHP命名深入分析法规

    有心人想想上面包车型地铁代码:

    复制代码 代码如下:

    起来以前先要驾驭多少个PHP命名空间相关术语。

    试行结果:

    以此值在调节和测量试验时十一分有用,它也可由于动态变化一个完全限定类名,如:

    namespace MyProjecthelperhttp;
    class MyClass
    皇家赌场,{
        #code...
    }
    namespace MyProjecthelperrequest;
    class MyClass
    {
        #code...
    }

    < ?php  namespace AppLib1;   class MyClass {   public function WhoAmI() {  return __METHOD__;   }  }   $c = __NAMESPACE__ . '\MyClass';  $m = new $c;  echo $m->WhoAmI(); // outputs: AppLib1MyClass::WhoAmI  ?>  

    接下去让咱们看一看PHP命名空间的片段高级天性。

    lib2.php

    // 下边包车型客车例子与 use MyFullNSname as NSname 相同
    use MyFullNSname;

    PHP命名空间高档天性

    < ?php  namespace AppLib1;   class MyClass {   public function WhoAmI() {  return __METHOD__;   }  }  ?>  在根文件夹下的文件就动用上面包车型地铁代码了:

    __NAMESPACE__是贰个PHP字符串,它连接回到当前命名空间的称号,在大局空间中它是三个空字符串。

    用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字争论。
    为十分短的标记符名称(经常是为着化解第一类标题而定义的)创立三个小名(或简捷)的名号,升高源代码的可读性。
    PHP 命名空间提供了一种将相关的类、函数和常量组合到一齐的门径。下边是三个认证 PHP 命名空间语法的演示:

     

    2.非限量名称和界定名称依据导入法则进行翻译,举个例子,假设ABC导入为C,调用CDe( )就能被翻译成ABCDe( );

    < ?php  namespace AppLib1;   class MyClass {   public function WhoAmI() {  return __METHOD__;   }  }   $m = new namespaceMyClass;  echo $m->WhoAmI(); // outputs: AppLib1MyClass::WhoAmI  ?>  

    复制代码 代码如下:

    3.字符串AppLib1MyClass被传送给__autoload函数,使用文件路径正斜线替换全部命名空间中的反斜线,然后修改字符串,classesAppLib1MyClass.php文件被自动载入;

    足足有多个命名空间分隔符的标记符,如Lib1MyFunction( )。

    1. AppLib1MYCONST  
    2. AppLib1MyFunction  
    3. AppLib1MyClass::WhoAmI  
    4. AppLib2MyClass::WhoAmI  

    <?php
    namespace A;
    use BD, CE as F;
    // 函数调用
    foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()
                // 再品尝调用全局函数 "foo"
    foo();     // 调用全局空间函数 "foo"
    myfoo();   // 调用定义在命名空间"Amy"中函数 "foo"
    F();        // 首先尝试调用定义在命名空间"A"中的函数 "F"
                // 再尝试调用全局函数 "F"
    // 类引用
    new B();    // 成立命名空间 "A" 中定义的类 "B" 的二个指标
                // 就算未找到,则尝试自动装载类 "AB"
    new D();    // 使用导入准绳,成立命名空间 "B" 中定义的类 "D" 的贰个指标
                // 假使未找到,则尝试自动装载类 "BD"
    new F();    // 使用导入法则,创立命名空间 "C" 中定义的类 "E" 的三个目的
                // 倘若未找到,则尝试自动装载类 "CE"
    new B();   // 创造定义在大局空间中的类 "B" 的三个对象
                // 就算未开掘,则尝试自动装载类 "B"
    new D();   // 创造定义在大局空间中的类 "D" 的二个目的
                // 借使未察觉,则尝试自动装载类 "D"
    new F();   // 创造定义在全局空间中的类 "F" 的二个指标
                // 假使未察觉,则尝试自动装载类 "F"
    // 调用另二个命名空间中的静态方法或命名空间函数
    Bfoo();    // 调用命名空间 "AB" 中函数 "foo"
    B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
                // 假使未找到类 "AB" ,则尝试自动装载类 "AB"
    D::foo();   // 使用导入准则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
                // 如果类 "BD" 未找到,则尝试自动装载类 "BD"
    Bfoo();   // 调用命名空间 "B" 中的函数 "foo"
    B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法
                // 若是类 "B" 未找到,则尝试自动装载类 "B"
    // 当前定名空间中的静态方法或函数
    AB::foo();   // 调用命名空间 "AA" 中定义的类 "B" 的 "foo" 方法
                  // 如果类 "AAB" 未找到,则尝试自动装载类 "AAB"
    AB::foo();  // 调用命名空间 "AB" 中定义的类 "B" 的 "foo" 方法
                  // 如果类 "AB" 未找到,则尝试自动装载类 "AB"
    ?>

    从未有过命名空间分隔符的标志符,如MyFunction( )。

    5.在命名空间中国和欧洲限定函数调用在运作时深入分析,比如,假使MyFunction( )在命名空间AB中被调用,PHP首先会搜索函数ABMyFunction( ),若无找到,然后会在大局空间中查找MyFunction( );

    myapp1.php

    // 导入二个大局类
    use ArrayObject;

    2.非范围名称和限量名称依据导入准则举办翻译,比如,若是ABC导入为C,调用CDe( )就能够被翻译成ABCDe( );

    myapp1.php

    解释:

    为了征引全局命名空间中的全局类,必须使用完全限定名称 new C()。

    近年公告的PHP 5.3中,最根本的多个新天性正是命名空间的参与。本文介绍了PHP命名空间的一些术语,其分析法规,以及部分高端成效的应用,希望能够帮衬读者在品种中确实使用命名空间。

    AppLib2MYCONST  AppLib2MyFunction  AppLib2MyClass::WhoAmI 命名空间外号

    PHP命名分析法规

    在意PHP不帮忙导入函数或常量。

    < ?php  namespace AppLib1;   class MyClass {   public function WhoAmI() {  return __METHOD__;   }  }   $m = new namespaceMyClass;  echo $m->WhoAmI(); // outputs: AppLib1MyClass::WhoAmI  ?>  

    < ?php  namespace AppLib1;  echo __NAMESPACE__; // outputs: AppLib1  ?>   那些值在调度时这几个有用,它也可由于动态变化一个一心限定类名,如:

    5.在命名空间中非范围函数调用在运作时分析,举例,假设MyFunction( )在命名空间AB中被调用,PHP首先会招来函数ABMyFunction( ),若无找到,然后会在全局空间中探究MyFunction( );

    取名空间概述

    统统限定名称是绝非任何歧义的,发轫的反斜线和文件路线的作用有一些类似,它象征“根”全局空间,假设大家在全局空间中贯彻了一个两样的MyFunction( ),能够运用MyFunction( )从lib1.php或lib2.php调用它。

    第3个use语句定义了“obj”作为AppLib2命名空间中MyClass类的别称,这种方法只适合于类,不能够用来常量和函数,现在我们就足以运用new Obj( )或象上边那样运维静态方法了。

    1.类AppLib1MyClass的别称是MC;

    非限定名称,或不分包前缀的类名称,举例 $a=new foo(); 或 foo::staticmethod();。要是当前定名空间是 currentnamespace,foo 将被深入分析为 currentnamespacefoo。倘诺使用 foo 的代码是大局的,不分包在其他命名空间中的代码,则 foo 会被剖判为foo。 警告:假职分名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被剖判为大局函数名称或常量名称。详细的情况参见 使用命名空间:后备全局函数名称/常量名称。

    ◆非限定名称(Unqualified name)

    关于PHP命名空间的运用就介绍到此地,希望您能够对PHP的命名空间有二个新的认知,并期望您能在新品类中确实使用命名空间。

    取名空间别称恐怕是最有效的构想了,小名允许大家选用不够长的称谓援引十分长的命名空间。

    全盘限定名称,或包罗了大局前缀操作符的称呼,举个例子, $a = new currentnamespacefoo(); 或 currentnamespacefoo::staticmethod();。在这种情形下,foo 总是被分析为代码中的文字名(literal name)currentnamespacefoo。
    选取命名空间:外号/导入

    myapp2.php

    AppLib1MYCONST  AppLib1MyFunction  AppLib1MyClass::WhoAmI  命名空间导入

    在此间中我们介绍了PHP命名空间的用处和namespace关键字,在那篇作品中大家将介绍一下use命令的施用以及PHP如何剖判命名空间的名字的。

    概念命名空间

    您大概感兴趣的稿子:

    • PHP命名空间(Namespace)的施用详解
    • PHP命名空间(namespace)的动态访问及利用技巧
    • PHP命名空间(namespace)的利用基础及示范
    • PHP命名空间(Namespace)简明教程
    • thinkphp autoload 命名空间自定义 namespace
    • PHP命名空间namespace的定义方法详解
    • PHP命名空间namespace用法实例解析
    • PHP命名空间namespace定义及导入use用法详解

    < ?php  namespace AppLib1;   class MyClass {   public function WhoAmI() {  return __METHOD__;   }  }   $m = new namespaceMyClass;  echo $m->WhoAmI(); // outputs: AppLib1MyClass::WhoAmI  ?>  自动载入命名空间类

    < ?php  $obj= new MyClass1(); // classes/MyClass1.php is auto-loaded  $obj= new MyClass2(); // classes/MyClass2.php is auto-loaded   // autoload function  function __autoload($class_name) {   require_once("classes/$class_name.php");  }  ?>  

    就算放肆合法的PHP代码都足以包涵在命名空间中,但独有二种档案的次序的代码受命名空间的影响,它们是:类,函数和常量。命名空间通过机要字namespace 来声称。纵然三个文书中蕴藏命名空间,它必须在任何具有代码在此以前宣称命名空间。别的,与PHP另外的言语特色不一致,同七个命名空间能够定义在多少个公文中,即允许将同一个命名空间的内容分割存放在区别的文书中。当然你也足以在同二个文本中定义多少个命名空间。

    本文由68399皇家赌场发布于集群主机,转载请注明出处:PHP命名空间的用途和namespace关键字

    关键词: 68399皇家赌场