好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳解PHP中的命名空間

詳解PHP中的命名空間

熱門標簽:常州地圖標注服務商 地圖標注平臺怎么給錢注冊 安裝電銷外呼系統 衡水外呼系統平臺 注冊400電話申請 百度商鋪地圖標注 福州人工外呼系統哪家強 釘釘打卡地圖標注 新河科技智能外呼系統怎么樣

命名空間其實早在PHP5.3就已經出現了。不過大部分同學可能在各種框架的使用中才會接觸到命名空間的內容,當然,現代化的開發(fā)也都離不開這些能夠快速產出的框架。這次我們不從框架的角度,僅從簡單的代碼角度來解析一下命名空間的概念和使用。

首先,我們要定義命名空間是個什么東西。

其實就像操作系統的目錄一樣,命名空間就是為了解決類似于操作系統中同一個文件夾不能有相同的文件名一樣的問題。假設我們只有一個文件,一個目錄,那么在這個目錄中,是不能有兩個完全相同的文件的。如果有這樣名稱完全相同的文件,那么操作系統也不知道我們到底應該打開的是哪一個文件。同理,在一個PHP文件中,我們也不能起相同名稱的函數或者類名,PHP也不知道我們到底要調用的是哪一個函數或者類。

理解了上述內容之后,再來看命名空間的語法,其實非常像我們的目錄的定義。

namespace A\B\C;

這個命名空間的定義就是指出了當前命名空間是A\B\C。就像是C:\A\B\C這樣一個文件夾一樣。光說不練假把式,直接上代碼來看看:

// file1.php
namespace FILE1;

const CONST_A = 2;
function testA(){
    echo 'FILE1\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE1\ObjectA', PHP_EOL;
    }
}
// file2.php
namespace FILE2;

const CONST_A = 3;
function testA(){
    echo 'FILE2\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE2\ObjectA', PHP_EOL;
    }
}

我們在namespace目錄下創(chuàng)建了這兩個php文件,函數和類名都是一樣的,但定義了不同的命名空間,一個是FILE1,一個是FILE2。

namespace A;

include 'namespace/file1.php';
include 'namespace/file2.php';

use FILE1, FILE2;
use FILE1\objectA as objectB;

const CONST_A = 1;
function testA(){
    echo 'A\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'A\ObjectA', PHP_EOL;
    }
}

// 當前命名空間
echo CONST_A, PHP_EOL; // 1
testA(); // A\testA()
$oA = new objectA();
$oA->test(); // A\ObjectA

// FILE1
echo FILE1\CONST_A, PHP_EOL; // 2
FILE1\testA(); // FILE1\testA()
$oA = new FILE1\objectA();
$oA->test(); // FILE1\ObjectA

$oB = new objectB();
$oB->test(); // FILE1\ObjectA

// FILE2
echo FILE2\CONST_A, PHP_EOL; // 3
FILE2\testA(); // FILE2\testA()
$oA = new FILE2\objectA();
$oA->test(); // FILE2\ObjectA

在測試代碼中,我們又定義了當前的命名空間為A。并include了file1.php和file2.php。并在這個文件中同時也定義了與file1.php和file2.php中相同的函數和類名。接下來我們依次調用這些靜態(tài)變量、函數和類。

  • 在默認情況下,靜態(tài)變量、函數、類調用的是當前命名空間下的內容
  • 在使用了FILE1\和FILE2\之后,調用的是就是指定命名空間下的內容
  • 需要使用use引入命名空間,否則無法使用命名空間里的內容
  • use中可以使用as關鍵字為命名空間或者其中的類指定別名

命名空間的使用其實就是這么的簡單??梢钥闯鑫覀冊诓煌拿臻g中就可以使用相同的函數或者類名了。這一點正是各類現代化開發(fā)框架的基礎。同時也是composer能夠實現的最主要的原因之一。

接下來,我們嘗試一個問題是否符合我們的預期,那就是兩個文件定義相同的命名空間是否能夠定義相同的類名呢?

// file1-1.php
namespace FILE1;

const CONST_A = 1.1;
function testA(){
    echo 'FILE1-1\testA()', PHP_EOL;
}

class objectA{
    function test(){
        echo 'FILE1-1\ObjectA', PHP_EOL;
    }
}

我們定義了一個file1-1.php,并且使用了和file1.php相同的FILE1命名空間。然后和file1.php一起include到測試代碼中。

include 'namespace/file1.php';
include 'namespace/file1-1.php'; // Cannot redeclare FILE1\testA()

好吧,在運行時直接就報錯,不能重復定義同名的函數名。如果注釋掉函數,那么會繼續(xù)報類名不能重復。我們再定義一個file1-2.php,這次還是使用FILE1這個命名空間,但是內容不一樣了。

// file1-2.php
namespace FILE1;

const CONST_A = 1.2;
function testA1_2(){
    echo 'FILE1-2\testA()', PHP_EOL;
}

class objectA1_2{
    function test(){
        echo 'FILE1-2\ObjectA', PHP_EOL;
    }
}

這樣當然就沒問題啦。這兩個文件在同一個命名空間下,但是卻有著不同的能力,這樣是完全OK的操作。

include 'namespace/file1.php';
include 'namespace/file1-2.php';
use FILE1;

// FILE1
echo FILE1\CONST_A, PHP_EOL; // 2
FILE1\testA(); // FILE1\testA()
$oA = new FILE1\objectA();
$oA->test(); // FILE1\ObjectA

// FILE1_2
echo FILE1\CONST_A, PHP_EOL; // 3
FILE1\testA1_2(); // FILE1-2\testA()
$oA = new FILE1\objectA1_2();
$oA->test(); // FILE1-2\ObjectA

測試代碼: github.com/zhangyue050…

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

您可能感興趣的文章:
  • 詳細分析PHP 命名空間(namespace)
  • PHP類的自動加載與命名空間用法實例分析
  • PHP 命名空間和自動加載原理與用法實例分析
  • PHP 命名空間原理與用法詳解
  • PHP命名空間(namespace)原理與用法詳解
  • php 命名空間(namespace)原理與用法實例小結
  • PHP命名空間用法實例分析
  • PHP命名空間與自動加載機制的基礎介紹
  • php的命名空間與自動加載實現方法

標簽:遼陽 鷹潭 克拉瑪依 六安 鶴崗 柳州 白城 唐山

巨人網絡通訊聲明:本文標題《詳解PHP中的命名空間》,本文關鍵詞  詳解,PHP,中的,命名,空間,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解PHP中的命名空間》相關的同類信息!
  • 本頁收集關于詳解PHP中的命名空間的相關信息資訊供網民參考!
  • 推薦文章