1. 程式人生 > >PHP之namespace小記

PHP之namespace小記

類名 現在 data exc sub const 全局 限定 代碼

命名空間的使用

在聲明命名空間之前唯一合法的代碼是用於定義源文件編碼方式的 declare 語句。所有非 PHP 代碼包括空白符都不能出現在命名空間的聲明之前。

PHP 命名空間中的類名可以通過三種方式引用:

  • 非限定名稱,或不包含前綴的類名稱.
  • 限定名稱,或包含前綴的名稱。
  • 完全限定名稱,或者包含了全局前綴操作符的名稱

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*/
foo::staticmethod(); /*同上*/
echo FOO; /*同上*/
/*限定名稱*/
subnamespace\foo(); /*解析為:Foo\Bar\subnamespace\foo*/
subnamespace\foo::staticmethod(); /*同上*/
echo subnamespace\FOO; /*同上*/

/*完去限定名稱*/
\Foo\Bar|foo(); /*解析為:Foo\Bar|foo*/
\Foo\Bar\foo::staticmethod(); /*同上*/
\Foo\Bar\FOO; /*同上*/

註意訪問任意全局類、函數或常量,都可以使用完全限定名稱,例如 \strlen() 或 \Exception 或 \INI_ALL。

在命名空間內部訪問全局類、函數和常量:

<?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之namespace小記