手机版

PHP的命名空间中文说明:使用命名空间:基础

2019-09-07 阅读 :

(PHP 5 >= 5.3.0, PHP 7)

在讨论如何使用命名空间之前,必须了解 PHP 是如何知道要使用哪一个命名空间中的元素的。可以将 PHP 命名空间与文件系统作一个简单的类比。在文件系统中访问一个文件有三种方式:

  1. 相对文件名形式如foo.txt。它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录。因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt
  2. 相对路径名形式如subdirectory/foo.txt。它会被解析为 currentdirectory/subdirectory/foo.txt
  3. 绝对路径名形式如/main/foo.txt。它会被解析为/main/foo.txt
PHP 命名空间中的元素使用同样的原理。例如,类名可以通过三种方式引用:
  1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo();foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace/foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。详情参见 使用命名空间:后备全局函数名称/常量名称。
  2. 限定名称,或包含前缀的名称,例如 $a = new subnamespace/foo();subnamespace/foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace/subnamespace/foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace/foo
  3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new /currentnamespace/foo();/currentnamespace/foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace/foo

下面是一个使用这三种方式的实例:

file1.php


<?php
namespace Foo/Bar/subnamespace;

const 
FOO 1;
function 
foo() {}
class 
foo
{
    static function 
staticmethod() {}
}
?>

file2.php


<?php
namespace Foo/Bar;
include 
'file1.php';

const 
FOO 2;
function 
foo() {}
class 
foo
{
    static function 
staticmethod() {}
}

/* 非限定名称 */
foo(); // 解析为 Foo/Bar/foo resolves to function Foo/Bar/foo
foo::staticmethod(); // 解析为类 Foo/Bar/foo的静态方法staticmethod。resolves to class Foo/Bar/foo, method staticmethod
echo FOO// resolves to constant Foo/Bar/FOO

/* 限定名称 */
subnamespace/foo(); // 解析为函数 Foo/Bar/subnamespace/foo
subnamespace/foo::staticmethod(); // 解析为类 Foo/Bar/subnamespace/foo,
                                  // 以及类的方法 staticmethod
echo subnamespace/FOO// 解析为常量 Foo/Bar/subnamespace/FOO
                                  
/* 完全限定名称 */
/Foo/Bar/foo(); // 解析为函数 Foo/Bar/foo
/Foo/Bar/foo::staticmethod(); // 解析为类 Foo/Bar/foo, 以及类的方法 staticmethod
echo /Foo/Bar/FOO// 解析为常量 Foo/Bar/FOO
?>

注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 /strlen()/Exception/INI_ALL

Example #1 在命名空间内部访问全局类、函数和常量


<?php
namespace Foo;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = /strlen('hi'); // 调用全局函数strlen
$b = /INI_ALL// 访问全局常量 INI_ALL
$c = new /Exception('error'); // 实例化全局类 Exception
?>

本文标题:PHP的命名空间中文说明:使用命名空间:基础 - 服务器教程_服务器技术_服务器知识_vps教程
本文地址:https://www.helloaliyun.com/tutorial/299.html

相关文章

  • CentOS 7 常用命令(系统关机、重启以及登出)

    关机:(系统的关机、重启以及登出 ) # 关闭系统(1)[root@localhost ~]# shutdown -h now # 关闭系统(2)[root@localhost ~]# init 0 # 关闭系统(3)[root@localhost ~]# telinit 0 # 按预定时间关闭系统[root@localhost...

    2019-12-07 服务器教程
  • linux重启命令 reboot与shutdown -r now的区别与联系

    在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告...

    2019-12-07 服务器教程
  • CentOS 7 如何使用命令重启或关机

    安装GNOME的朋友们首先切换到字符界面。切换到字符界面的方法如下: 先登陆进入系统,进入图形化界面,然后按Ctrl+Alt+F6(笔记本的是Ctrl+Alt+shift+Fn),进入字符界面。关机命令:shutdown或poweroffshutdown:shutdown -h now...

    2019-12-07 服务器教程
  • CentOS 7 正确关机重启的命令方法

    linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机。和Windows不同,在linux系统下,很多进程是在后台执行的。在屏幕背后,可能有很多人同时在工作。如果直接按下电源的按钮,其他...

    2019-12-07 服务器教程
  • CentOS下的yum upgrade和yum update区别,没事别乱用!

    说明:生产环境对软件版本和内核版本要求非常精确,别没事有事随便的进行yum update操作!!!!!!!!!yum update: 升级所有包同时也升级软件和系统内核yum upgrade:只升级所有包,不升级软件和系统内核...

    2019-12-07 服务器教程
你可能感兴趣
热门浏览