PHP 中的 use 關鍵字
本文將介紹 PHP 中的 use
和 namespace
。然後,我們將通過建立一個小專案來完成這些關鍵字的實現。
PHP 中 namespace
的介紹和實現
PHP 中的名稱空間是一個包含程式碼塊的標籤。我們可以使用名稱空間從專案中的其他位置訪問特定的程式碼塊。
例如,名稱空間可以包含類、函式、常量等程式碼塊。
名稱空間主要解決兩個問題。這些都是:
- 名稱空間避免了類或函式之間的名稱衝突。例如,當使用者定義的函式與核心 PHP 函式或庫函式的名稱匹配時,可能會出現歧義。
- 名稱空間允許在專案期間模組之間更好的通訊和組織。我們可以給元件起別名以獲得更好的可讀性。
namespace
關鍵字表示名稱空間,它應該是 PHP 檔案中的第一行程式碼。讓我們看一個名稱空間如何工作的例子。建立一個類 Greetings
並在其中編寫一個建構函式。
顯示訊息 Hello everyone!
在建構函式內部。將檔案另存為 greetings.php
。
接下來,在與 index.php
相同的目錄中建立另一個檔案。首先,使用 require
函式要求 greetings.php
。
然後,建立一個變數 $hello
並將 Greetings
類例項例項化為 $hello = new Greetings
。
當我們提供 index.php
檔案時,它會給出一個錯誤,Class 'Greetings' not found
。為了解決這個問題,我們可以使用名稱空間。
為此,在 greetings.php
檔案中建立名稱空間 subodh\project
。接下來,在 index.php
檔案中,在類 Greetings
之前使用名稱空間 subodh\project
。
這一次,訊息 Hello everyone!
被顯示。這就是如何使用名稱空間來組織專案中的元件。
我們也可以類似地使用名稱空間來組織函式和變數。
namespace subodh\project;
class Greetings{
public function __construct(){
print("Hello everyone!")."<br>";
}
}
function greet(){
print("Good Morning!")."<br>";
}
const greeting = "have a nice day"."<br>";
require 'greetings.php';
$hello = new subodh\project\Greetings;
subodh\project\greet();
echo subodh\project\greeting;
輸出:
Hello everyone!
Good Morning!
have a nice day
在 PHP 中實現 use
和 namespace
我們可以使用 PHP 中的 use
關鍵字來匯入 PHP 中的 namespace
併為其賦予別名。因此,我們可以用短別名替換長名稱空間。
這提高了程式碼的可讀性。我們可以使用別名來表示名稱空間。
首先,我們將使用 use
關鍵字來建立上面編寫的示例程式碼的名稱空間的別名。
例如,在 index.php
檔案中,寫入 use
關鍵字,將 greetings.php
檔案中寫入的名稱空間匯入為 use subodh\project
。
這意味著現在我們可以使用 project
來訪問類、函式和常量,如下例所示。
require 'greetings.php';
use subodh\project;
$hello = new project\Greetings;
project\greet();
echo project\greeting;
我們還可以如下建立自定義別名。
require 'greetings.php';
use subodh\project as pr;
$hello = new pr\Greetings;
pr\greet();
echo pr\greeting;
我們還可以使用 use
關鍵字匯入類、函式和常量。我們可以在類的 use
關鍵字之後寫名稱空間。
首先,我們應該在名稱空間的末尾附加類名。然後,我們可以直接訪問該類。
在函式和常量的情況下,我們應該在 use
關鍵字之後分別寫關鍵字 function
和 constant
。
之後,我們可以編寫名稱空間,附加函式和常量的名稱。示例如下所示。
use subodh\project\Greetings;
$hello = new Greetings;
use function subodh\project\greet;
greet();
use const subodh\project\greeting;
echo greeting;
上述所有方法的輸出都是相同的。
輸出:
Hello everyone!
Good Morning!
have a nice day
在 PHP 中使用 use
對多個類進行分組
正如 PHP7 中介紹的那樣,我們可以在使用 use
關鍵字時對類、函式和常量進行分組。
此功能可防止 use
關鍵字的多次使用,並使程式碼更簡潔易懂。
程式碼的行數也減少了,並且保持了可重用性。讓我們考慮以下 vehicle.php
檔案。
它包含兩個類,Car
和 Motorcycle
以及建構函式。此外,我們還建立了名稱空間 subodh\project
。
namespace subodh\project;
class Car{
public function __construct(){
print("This is Car class")."<br>";
}
}
class Motorcycle{
public function __construct(){
print("This is Motorcycle class")."<br>";
}
}
我們可以使用一次 use
關鍵字將兩個類作為同一個名稱空間匯入。我們可以在名稱空間後面的花括號中包含類名。
我們甚至可以為該類建立一個別名。逗號分隔類名。
例如,在 use
關鍵字之後寫入名稱空間 subodh\project\{}
。然後,在花括號內,寫上 Car
類,並在逗號後寫摩托車
類。
最後,為 Motorcycle
類寫別名 bike
。現在,我們可以通過使用 new
關鍵字例項化 Car
和 bike
來建立這些類的物件。
require('vehicle.php');
use subodh\project\{Car, Motorcycle as bike};
$car = new Car;
$bike = new bike;
輸出:
This is Car class
This is Motorcycle class
因此,我們可以使用 use
關鍵字對 PHP 名稱空間中的類進行分組。我們也可以類似地對函式和常量進行分組。
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn