Akses pemalar kelas menggunakan pembolehubah ringkas yang mengandungi nama pemalar
P粉691461301
P粉691461301 2023-10-20 14:57:01
0
2
594

Saya cuba mengakses pemalar kelas dalam salah satu kelas saya:

const MY_CONST = "value";

Jika saya mempunyai pembolehubah untuk memegang nama pemalar ini seperti ini:

$myVar = "MY_CONST";

Bolehkah saya mengakses nilai MY_CONST entah bagaimana?

self::$myVar

Ini jelas tidak berfungsi kerana ia adalah untuk sifat statik. Juga, pembolehubah pembolehubah tidak berfungsi sama ada.

P粉691461301
P粉691461301

membalas semua(2)
P粉404539732

Tiada sintaks yang sepadan, tetapi anda boleh menggunakan carian eksplisit:

print constant("classname::$myConst");

Saya percaya ia berkesan untuk self:: juga.

P粉103739566

Terdapat dua cara untuk melakukan ini: menggunakan fungsi malar atau menggunakan pantulan.

Fungsi berterusan

Fungsi pemalar digunakan untuk pemalar yang diisytiharkan melalui define serta pemalar kelas:

class A
{
    const MY_CONST = 'myval';

    static function test()
    {
        $c = 'MY_CONST';
        return constant('self::'. $c);
    }
}

echo A::test(); // output: myval

Kelas refleksi

Kaedah kedua, lebih susah payah adalah melalui refleksi:

$ref = new ReflectionClass('A');
$constName = 'MY_CONST';
echo $ref->getConstant($constName); // output: myval
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan