首頁  >  文章  >  後端開發  >  如何利用PHP8的屬性可空性提升程式碼品質

如何利用PHP8的屬性可空性提升程式碼品質

王林
王林原創
2023-06-21 11:02:561512瀏覽

隨著PHP8的發布,屬性可空性成為了一個重要的新特性。這個特性使得我們可以聲明一個屬性可以為空,使得我們可以更好地控制我們的程式碼,並且可以幫助我們減少一些潛在的錯誤。

屬性可空性是什麼?

在PHP之前,我們只能宣告屬性為固定型別(例如字串、整數、布林等)。然而,在某些情況下,屬性可能不會被初始化或賦值為空。這意味著在呼叫這些屬性時,我們可能會遇到一個致命的錯誤,例如未定義的變數或無法呼叫未定義的方法。

屬性可空性是透過在屬性宣告前面加上問號來實現的。例如,我們可以宣告一個可空字串屬性如下:

public ?string $name;

這意味著我們可以將這個屬性設為NULL,而不是一個字串,從而避免了致命錯誤。

如何使用屬性可空性提升程式碼品質?

使用屬性可空性可以大幅提升程式碼質量,以下是一些例子:

  1. 在方法中使用屬性可空性

例如,我們有一個Person類,其中有一個名字和一個年齡屬性。我們可以使用屬性可空性來確保我們的程式碼安全,如下所示:

class Person {
    public ?string $name;
    public ?int $age;
    
    public function displayInfo(): string {
        $name = $this->name ?? "Unknown";
        $age = $this->age ?? "Unknown";
        return "Name: $name, Age: $age";
    }
}

在上面的範例中,我們使用了空合併運算子(??)來為未定義的屬性提供默認值。這意味著即使屬性為NULL,我們的程式碼也不會出現致命錯誤。

  1. 檢查屬性是否為空

在某些情況下,我們希望檢查屬性是否為空。例如,如果我們使用一個空白的字串作為預設值,我們可能希望禁止使用者傳遞空字串。我們可以使用屬性可空性來實現這一點,如下所示:

class User {
    public ?string $name;
    
    public function setName(?string $name): void {
        if ($name === "") {
            throw new InvalidArgumentException("Name can't be empty");
        }
        $this->name = $name;
    }
}

在上面的範例中,我們使用了一個類型為NULL或字串的可空$name屬性。在setName方法中,我們先檢查$name是否為空白的字串,如果是,則拋出一個例外。否則,我們將值指派給屬性。

  1. 取消引用可空屬性

在某些情況下,我們可能會想要將可空屬性轉換為非空屬性。例如,我們可能有一個關聯數組,其中包含與物件屬性相同的鍵。我們可以使用屬性可空性來將這些值轉換為物件屬性,如下所示:

class Post {
    public ?string $title;
    public ?string $content;
    
    public function __construct(array $data) {
        $this->title = $data['title'] ?? null;
        $this->content = $data['content'] ?? null;
    }
    
    public function toObject(): object {
        $obj = (object)[];
        foreach ($this as $key => $value) {
            $obj->{$key} = &$this->{$key};
        }
        return $obj;
    }
}

$data = [
    'title' => 'Hello',
    'content' => 'World',
];
$post = new Post($data);
$obj = $post->toObject();

在上面的範例中,我們使用了屬性可空性來簡化程式碼。在建構函式中,我們遍歷關聯數組,並將值賦給可空屬性(如果鍵不存在,則值為NULL)。在toObject方法中,我們將物件轉換為對象,並刪除了可空性,使得屬性成為非空屬性。

總結

屬性可空性是一個非常有用的特性,可以大幅提升我們的程式碼品質。它可以幫助我們避免一些常見的錯誤,例如避免使用未定義的變數或方法,並且可以幫助我們更好地控制我們的程式碼。如果您還沒有升級到PHP8,請考慮使用此特性來提升您的程式碼品質。

以上是如何利用PHP8的屬性可空性提升程式碼品質的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn