婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何理解PHP核心特性命名空間

如何理解PHP核心特性命名空間

熱門標簽:天津電銷外呼系統違法嗎 手機外呼系統什么原理 上海400客服電話怎么申請 滄州電銷外呼系統價格 銀行信貸電話機器人 合肥ai電銷機器人費用 400電話個人能不能辦理 凱立德地鐵站地圖標注 溫州外呼系統招商

提出

PHP 在 5.3 后提出了命名空間用來解決組件之間的命名沖突問題,主要參考了文件系統的設計:

  • 同一個目錄下不允許有相同的文件名 - 同一個命名空間下不允許有相同的類;
  • 不同的目錄可以有同名文件 - 不同的命名空間可以有相同的類;

定義

使用namespace關鍵字來定義一個命名空間。其中,頂層命名空間通常為廠商名,不同開發者的廠商命名空間是唯一的。命名空間不需要與文件目錄一一對應,但是最好遵守PSR-4規范。

?php

namespace Symfony\Component\HttpFoundation;

class Request {

}
命名空間必須在所有代碼之前聲明,唯一的例外就是 declare 關鍵字。

?php

declare(strict_types=1);

namespace App;

命名空間內可包含任意 PHP 代碼,但是僅對類 (包括抽象類和 Trait)、接口、函數和常量這四種類型生效。

?php
namespace MyProject;

const CONNECT_OK = 1;
class FOO {}
interface Foo{}
function foo() {}

使用

使用use關鍵字來引入命名空間

?php

namespace App;

use Symfony\Component\HttpFoundation\Request;
use Foo\Bar;

class Test {
    public function run()
    {
        $bar = new Bar();
    }
}

定義和使用推薦遵循PSR-2的規范

  • namespace之后必須存在一個空行;
  • 所有use聲明必須位于namespace聲明之后;
  • 每條use聲明必須只有一個use關鍵字。

use語句塊之后必須存在一個空行。

當use引入的類出現同名時,可使用as來定義別名

?php

namespace App;

use Foo\Bar as BaseBar;

class Bar extends BaseBar {

}

限定符

除了使用use外,還可以直接使用\限定符來進行解析,規則很簡單:如果含有\前綴則代表從全局命名空間開始解析,否則則代表從當前命名空間開始解析。

?php

namespace App;

\Foo\Bar\foo();  // 解析成 \Foo\Bar\foo();
Foo\Bar\foo();  // 解析成 App\Foo\Bar\foo();
此規則也適用于函數、常量等

$a = \strlen('hi'); // 調用全局函數 strlen
$b = \INI_ALL; // 訪問全局常量 INI_ALL
$c = new \Exception('error'); // 實例化全局類 Exception

有兩個需要特別注意的地方:

對于函數和常量而言,如果當前命名空間不存在,則會自動去全局命名空間去尋找,因此可省略\前綴。對于類而言,如果當前命名空間解析不到,不會去全局空間尋找,因此,不可省略\

$a = strlen('hi');
$b = INI_ALL;
$c = new Exception('error'); // 錯誤
$c = new \Exception('error'); // 正確

當動態調用命名空間時,該命名空間始終會被當成是全局命名空間,因此可以省略前綴\

$class1 = 'Foo\Bar';
$object1 = new $class1;  // 始終被解析成 \Foo\Bar

在內部訪問命名空間

PHP 支持兩種抽象的訪問當前命名空間內部元素的方法,__NAMESPACE__魔術常量和namespace關鍵字。

__NAMESPACE__常量的值是包含當前命名空間名稱的字符串,如果是在全局命名空間,則返回空字符串。

?php
namespace MyProject;

function get($classname)
{
    $a = __NAMESPACE__ . '\\' . $classname;
    return new $a;
}

關鍵字namespace可用來顯式訪問當前命名空間或子命名空間中的元素。它等價于類中的self操作符

namespace App;

use blah\blah as mine;

blah\mine(); // App\blah\mine()
namespace\blah\mine(); // App\blah\mine()

namespace\func(); // App\func()
namespace\sub\func(); // App\sub\func()
namespace\cname::method(); // App\cname::method()
$a = new namespace\sub\cname(); // App\sub\cname
$b = namespace\CONSTANT; // App\CONSTANT

轉義\符號

此外,推薦對所有的\進行轉義,避免出現不可預期的后果

$class = "dangerous\name"; // \n 被解析成換行符
$obj = new $class;

$class = 'dangerous\name'; // 正確,但是不推薦
$class = 'dangerous\\name'; // 推薦
$class = "dangerous\\name"; // 推薦

以上就是如何理解PHP核心特性命名空間的詳細內容,更多關于PHP命名空間的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • php的命名空間與自動加載實現方法
  • PHP命名空間定義與用法實例分析
  • php命名空間設計思想、用法與缺點分析
  • PHP進階學習之命名空間基本用法分析
  • PHP中命名空間的使用例子
  • 實例講解PHP中使用命名空間
  • PHP命名空間簡單用法示例
  • PHP命名空間與自動加載類詳解
  • PHP命名空間namespace及use的簡單用法分析

標簽:白城 洛陽 怒江 赤峰 金華 酒泉 七臺河 溫州

巨人網絡通訊聲明:本文標題《如何理解PHP核心特性命名空間》,本文關鍵詞  如何,理解,PHP,核心,特性,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何理解PHP核心特性命名空間》相關的同類信息!
  • 本頁收集關于如何理解PHP核心特性命名空間的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 保靖县| 镇雄县| 武汉市| 鹿泉市| 永济市| 夏邑县| 桃园市| 库尔勒市| 观塘区| 南昌县| 长顺县| 新野县| 新丰县| 巴楚县| 汤阴县| 承德县| 周宁县| 海宁市| 乐业县| 神农架林区| 辰溪县| 漳州市| 宜昌市| 林周县| 通州区| 比如县| 呼图壁县| 常山县| 盐城市| 上高县| 永定县| 招远市| 舟山市| 砚山县| 云安县| 邻水| 金华市| 淮南市| 大兴区| 永胜县| 石嘴山市|