cari

Rumah  >  Soal Jawab  >  teks badan

Akses pemalar kelas menggunakan pembolehubah ringkas yang mengandungi nama pemalar

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粉691461301P粉691461301401 hari yang lalu590

membalas semua(2)saya akan balas

  • P粉404539732

    P粉4045397322023-10-21 13:52:00

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

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

    Saya percaya ia berkesan untuk self:: juga.

    balas
    0
  • P粉103739566

    P粉1037395662023-10-21 13:02:38

    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

    balas
    0
  • Batalbalas