男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

使用命名空間:基礎

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

在討論如何使用命名空間之前,必須了解 PHP 是如何知道要使用哪一個(gè)命名空間中的元素的??梢詫?PHP 命名空間與文件系統作一個(gè)簡(jiǎn)單的類(lèi)比。在文件系統中訪(fǎng)問(wèn)一個(gè)文件有三種方式:

  1. 相對文件名形式如 foo.txt。它會(huì )被解析為 currentdirectory/foo.txt,其中 currentdirectory 表示當前目錄。因此如果當前目錄是 /home/foo,則該文件名被解析為 /home/foo/foo.txt。
  2. 相對路徑名形式如 subdirectory/foo.txt。它會(huì )被解析為 currentdirectory/subdirectory/foo.txt。
  3. 絕對路徑名形式如 /main/foo.txt。它會(huì )被解析為 /main/foo.txt。
PHP 命名空間中的元素使用同樣的原理。例如,類(lèi)名可以通過(guò)三種方式引用:
  1. 非限定名稱(chēng),或不包含前綴的類(lèi)名稱(chēng),例如 $a=new foo();foo::staticmethod();。如果當前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會(huì )被解析為 foo。 警告:如果命名空間中的函數或常量未定義,則該非限定的函數名稱(chēng)或常量名稱(chēng)會(huì )被解析為全局函數名稱(chēng)或常量名稱(chēng)。詳情參見(jiàn) 使用命名空間:后備全局函數名稱(chēng)/常量名稱(chēng)。
  2. 限定名稱(chēng),或包含前綴的名稱(chēng),例如 $a = new subnamespace\foo();subnamespace\foo::staticmethod();。如果當前的命名空間是 currentnamespace,則 foo 會(huì )被解析為 currentnamespace\subnamespace\foo。如果使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會(huì )被解析為 subnamespace\foo。
  3. 完全限定名稱(chēng),或包含了全局前綴操作符的名稱(chēng),例如, $a = new \currentnamespace\foo();\currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為代碼中的文字名(literal name)currentnamespace\foo。

下面是一個(gè)使用這三種方式的實(shí)例:

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() {}
}

/* 非限定名稱(chēng) */
foo(); // 解析為函數 Foo\Bar\foo 
foo::staticmethod(); // 解析為類(lèi) Foo\Bar\foo 的靜態(tài)方法 staticmethod
echo FOO// 解析為常量 Foo\Bar\FOO

/* 限定名稱(chēng) */
subnamespace\foo(); // 解析為函數 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析為類(lèi) Foo\Bar\subnamespace\foo,
                                  // 以及類(lèi)的方法 staticmethod
echo subnamespace\FOO// 解析為常量 Foo\Bar\subnamespace\FOO
                                  
/* 完全限定名稱(chēng) */
\Foo\Bar\foo(); // 解析為函數 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析為類(lèi) Foo\Bar\foo, 以及類(lèi)的方法 staticmethod
echo \Foo\Bar\FOO// 解析為常量 Foo\Bar\FOO
?>

注意訪(fǎng)問(wèn)任意全局類(lèi)、函數或常量,都可以使用完全限定名稱(chēng),例如 \strlen()\Exception\INI_ALL。

示例 #1 在命名空間內部訪(fǎng)問(wèn)全局類(lèi)、函數和常量

<?php
namespace Foo;

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

$a = \strlen('hi'); // 調用全局函數strlen
$b = \INI_ALL// 訪(fǎng)問(wèn)全局常量 INI_ALL
$c = new \Exception('error'); // 實(shí)例化全局類(lèi) Exception
?>

男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站