Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Saya Mendapat Ralat Maut PHP: 'Menggunakan $this apabila tidak dalam konteks objek'?

Mengapa Saya Mendapat Ralat Maut PHP: 'Menggunakan $this apabila tidak dalam konteks objek'?

DDD
Lepaskan: 2024-12-15 02:56:17
asal
721 orang telah melayarinya

Why Am I Getting a PHP Fatal Error:

Menggunakan $this Outside Object Scope: PHP Fatal Error Explained

Ralat maut PHP "Menggunakan $this apabila tidak dalam konteks objek" berlaku apabila cuba mengakses kata kunci $this dalam konteks bukan objek. Kata kunci $this mewakili contoh objek semasa dan hanya boleh digunakan dalam skop kaedah atau harta objek.

Pertimbangkan contoh senario yang disediakan dalam soalan, di mana ralat berlaku dalam fail class.php. Garis yang menyebabkan ralat ialah:

$this->foo = $foo;
Salin selepas log masuk

Baris ini memberikan nilai pembolehubah global $foo kepada sifat foo objek semasa. Walau bagaimanapun, ralat dicetuskan kerana kaedah __construct(), di mana baris ini berada, tidak dilaksanakan dalam konteks objek.

Untuk mengelakkan ralat ini, adalah penting untuk memastikan bahawa $this digunakan hanya dalam konteks kaedah atau sifat objek. Dalam contoh yang disediakan, pendekatan berikut akan menyelesaikan ralat:

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;
    }
}
Salin selepas log masuk

Sekarang, kaedah __construct() mengambil parameter $foo yang menjadi harta foo objek. Selain itu, kaedah foobarfunc() merujuk dengan betul sifat foo objek menggunakan $this->foo.

Jika niatnya adalah untuk menggunakan kaedah foobarfunc() tanpa mencipta objek, kaedah statik harus digunakan sebaliknya , seperti:

class foobar {

    public static $foo; // Static variable

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

Dalam kes ini, kaedah foobarfunc() boleh dipanggil terus menggunakan nama kelas, tanpa memerlukan contoh objek.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Maut PHP: 'Menggunakan $this apabila tidak dalam konteks objek'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan