首頁 >後端開發 >php教程 >為什麼我會收到 PHP 致命錯誤:「不在物件上下文時使用 $this」?

為什麼我會收到 PHP 致命錯誤:「不在物件上下文時使用 $this」?

DDD
DDD原創
2024-12-15 02:56:17726瀏覽

Why Am I Getting a PHP Fatal Error:

在物件作用域外使用$this:PHP 致命錯誤解釋

發生PHP 致命錯誤「不在物件上下文中使用$this」當嘗試在非物件上下文中存取$this 關鍵字時。 $this 關鍵字表示目前物件實例,只能在物件的方法或屬性範圍內使用。

考慮問題中提供的範例場景,其中錯誤發生在 class.php 檔案中。導致錯誤的行是:

$this->foo = $foo;

該行將全域變數 $foo 的值指派給目前物件的 foo 屬性。但是,會觸發錯誤,因為該行所在的 __construct() 方法不是在物件上下文中執行。

要避免此錯誤,請務必確保 $this 僅在上下文中使用物件的方法或屬性。在提供的範例中,以下方法可以解決該錯誤:

class foobar {

    public $foo;

    public function __construct($foo) {
        $this->foo = $foo; // Now within object context
    }

    public function foobarfunc() {
        return $this->foo();
    }

    public function foo() {
        return $this->foo;
    }
}

現在, __construct() 方法採用參數 $foo ,該參數將成為物件的 foo 屬性。此外, foobarfunc() 方法使用 $this->foo 正確引用物件的 foo 屬性。

如果打算在不建立物件的情況下呼叫foobarfunc() 方法,則應使用靜態方法,如:

class foobar {

    public static $foo; // Static variable

    public static function foobarfunc() {
        return self::$foo; // Reference static variable
    }
}

這種情況下,可以直接使用類別名稱呼叫foobarfunc () 方法,不需要物件實例。

以上是為什麼我會收到 PHP 致命錯誤:「不在物件上下文時使用 $this」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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