91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

復習PHP-語言參考-命名空間

發布時間:2020-06-27 00:52:09 來源:網絡 閱讀:426 作者:qzd1989 欄目:web開發

1.定義命名空間

命名空間只作用于類,函數,常量。(注意只能是const的常量,而不能是define出來的常量,我測試是報錯的。)

通過namespace 聲明。

必須在所有代碼之前聲明。

2.定義子命名空間

可以多用層,這樣可以理出一個層級結構來,比如LIBRARY里有幾個不同類型的庫,有層次才顯得更清晰。(ACTION\INDEX)

3.在同一文件定義多個命名空間

用大括號括起來,但不推薦

如:

<?php

namespace a{func1,class2,const3}

namespace b{xxx}

?>

多個命名空間和執行代碼放在一起需要這么干

<?php

namespace a{func1,class2,const3}

namespace b{xxx}

namespace{

\a\func1();

}

?>

4.使用基礎

注意:命名空間的使用有點類似于HTML里URL的規則

<?php

namespace a\a1;

function d(){}

d(); //a\a1\d()

\a\a1\d(); //\a\a1\d();

一個相對路徑,一個絕對路徑。

?>

注意:如果你想在一個命名空間內訪問全局變量或全局方法或全局類,可以加上\

<?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
?>

提示:如果要實例化一個字符串形式的類名(包含命名空間),那就最好用單引號將字符串引起來。如 $a = new ‘\namespace\classname’;

5.namespace關鍵字和__NAMESPACE__常量

__NAMESPACE__在全局是一個空字符串
__NAMESPACE__在動態創建變量時非常有用。
比如
<?php
namespace abc;
function get($classname)
{
     return new __NAMESPACE__.'\\'.$classname;
}
?>
__NAMESPACE__在類里也可以用這樣動態創建變量什么的,有點類似于self的功能
而namespace 可以當作當前命名空間名稱來動態使用,如:
<?php
namespace A;
const name = 'jason';
echo namespace\name; // print out jason;
?>
如果在全局中使用的話
<?php
$a = new namespace\c; //這里實際上只有c; 而會忽略namespace 因為它是空的。
?>


6.別名和use的使用
<?php
namespace foo;
use My\Full\Classname as Another;

// 下面的例子與 use My\Full\NSname as NSname 相同
use My\Full\NSname;

// 導入一個全局類
use \ArrayObject;

$obj = new namespace\Another; // 實例化 foo\Another 對象
$obj = new Another; // 實例化 My\Full\Classname 對象
NSname\subns\func(); // 調用函數 My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // 實例化 ArrayObject 對象
// 如果不使用 "use \ArrayObject" ,則實例化一個 foo\ArrayObject 對象
?>
<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 實例化 My\Full\Classname 對象
NSname\subns\func(); // 調用函數 My\Full\NSname\subns\func
?>
<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 實例化一個 My\Full\Classname 對象
$a = 'Another';
$obj = new $a;      // 實際化一個 Another 對象
?>
注意:別名不能用變量來代替,如:
<?php
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // 實例化一個 My\Full\Classname 對象
$a = 'Another';
$obj = new $a;      // 實際化一個 Another 對象
?>


7.全局空間
如果在沒有命名空間的腳本里寫東西,默認就是全局的,如果非要加個特征碼或在命名空間調用全局空間里的類,常量和函數的話,前面加個\即可。
8.使用命名空間時,優先級
<?php
namespace A\B\C;
class Exception extends \Exception {} //完全限定全局類\Exception
?>
注意:在命名空間里,用全局和本身的函數 類和常量時,需要特別小心它是屬于哪里的,是全局的還是該命名空間里的,所以:
在命名空間作用域里,用全局的類 常量和函數時,都最好要加上完全限定名稱的符號\   如\fopen,\substr  總覺得怪怪的啊。
注意:在一個已有命名空間的腳本里,直接輸寫無命名空間符號的函數或者常量或者類,它的查找順序為:
1、先在本命名空間中找該函數,常量或類
2、找不到的時候再在全局里找。
<?php
namespace A;
use B\D, C\E as F;

// 函數調用

foo();      // 首先嘗試調用定義在命名空間"A"中的函數foo()
            // 再嘗試調用全局函數 "foo"

\foo();     // 調用全局空間函數 "foo"

my\foo();   // 調用定義在命名空間"A\my"中函數 "foo"

F();        // 首先嘗試調用定義在命名空間"A"中的函數 "F"
            // 再嘗試調用全局函數 "F"

// 類引用

new B();    // 創建命名空間 "A" 中定義的類 "B" 的一個對象
            // 如果未找到,則嘗試自動裝載類 "A\B"

new D();    // 使用導入規則,創建命名空間 "B" 中定義的類 "D" 的一個對象
            // 如果未找到,則嘗試自動裝載類 "B\D"

new F();    // 使用導入規則,創建命名空間 "C" 中定義的類 "E" 的一個對象
            // 如果未找到,則嘗試自動裝載類 "C\E"

new \B();   // 創建定義在全局空間中的類 "B" 的一個對象
            // 如果未發現,則嘗試自動裝載類 "B"

new \D();   // 創建定義在全局空間中的類 "D" 的一個對象
            // 如果未發現,則嘗試自動裝載類 "D"

new \F();   // 創建定義在全局空間中的類 "F" 的一個對象
            // 如果未發現,則嘗試自動裝載類 "F"

// 調用另一個命名空間中的靜態方法或命名空間函數

B\foo();    // 調用命名空間 "A\B" 中函數 "foo"

B::foo();   // 調用命名空間 "A" 中定義的類 "B" 的 "foo" 方法
            // 如果未找到類 "A\B" ,則嘗試自動裝載類 "A\B"

D::foo();   // 使用導入規則,調用命名空間 "B" 中定義的類 "D" 的 "foo" 方法
            // 如果類 "B\D" 未找到,則嘗試自動裝載類 "B\D"

\B\foo();   // 調用命名空間 "B" 中的函數 "foo"

\B::foo();  // 調用全局空間中的類 "B" 的 "foo" 方法
            // 如果類 "B" 未找到,則嘗試自動裝載類 "B"

// 當前命名空間中的靜態方法或函數

A\B::foo();   // 調用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法
              // 如果類 "A\A\B" 未找到,則嘗試自動裝載類 "A\A\B"

\A\B::foo();  // 調用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法
              // 如果類 "A\B" 未找到,則嘗試自動裝載類 "A\B"
?>

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

固镇县| 乌拉特后旗| 新源县| 乌鲁木齐县| 射阳县| 信宜市| 那坡县| 锡林浩特市| 易门县| 花垣县| 南皮县| 时尚| 轮台县| 沙湾县| 清丰县| 新密市| 分宜县| 义马市| 察隅县| 裕民县| 门源| 阳春市| 东兰县| 京山县| 镇赉县| 韶山市| 乐亭县| 天柱县| 宝丰县| 武隆县| 安泽县| 竹山县| 阿坝| 上栗县| 宁乡县| 城步| 全椒县| 华容县| 枣阳市| 栖霞市| 申扎县|