PHP 中的 use 關鍵字

Subodh Poudel 2023年1月30日 2022年5月13日
  1. PHP 中 namespace 的介紹和實現
  2. 在 PHP 中實現 usenamespace
  3. 在 PHP 中使用 use 對多個類進行分組
PHP 中的 use 關鍵字

本文將介紹 PHP 中的 usenamespace。然後,我們將通過建立一個小專案來完成這些關鍵字的實現。

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 中實現 usenamespace

我們可以使用 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 關鍵字之後分別寫關鍵字 functionconstant

之後,我們可以編寫名稱空間,附加函式和常量的名稱。示例如下所示。

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 檔案。

它包含兩個類,CarMotorcycle 以及建構函式。此外,我們還建立了名稱空間 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 關鍵字例項化 Carbike 來建立這些類的物件。

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 Poudel avatar Subodh Poudel avatar

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