Saya ingin bisa melakukan sesuatu seperti ini:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
Ini tidak berhasil. Apakah ada cara langsung untuk melakukan sesuatu yang setara? Perhatikan bahwa saya terjebak dengan kelas; itu ada di perpustakaan yang tidak bisa saya tulis ulang. Saya sedang menulis kode yang membutuhkan argumen pada baris perintah, dan saya sangat ingin menggunakan nama simbolis daripada nomor id.
php
class-constants
Ben
sumber
sumber
ThingIDs::{$thing}
?Jawaban:
$id = constant("ThingIDs::$thing");
http://php.net/manual/en/function.constant.php
sumber
defined("ThingIDs::$thing");
$id = constant(sprintf('%s::%s', ThingIDs::class, $thing));
use
di bagian atas file dan kemudian menggunakan::class
metode ajaib untuk mendapatkan FQDN meningkatkan keterbacaan.Gunakan Refleksi
sumber
Jika Anda menggunakan namespace, Anda harus menyertakan namespace dengan kelas.
sumber
sumber
Fungsi pembantu
Anda dapat menggunakan fungsi seperti ini:
Dibutuhkan dua argumen:
Jika sebuah instance objek dilewatkan, nama kelasnya akan disimpulkan. Jika Anda menggunakan PHP 7, Anda dapat menggunakan
::class
untuk mengirimkan nama kelas yang sesuai tanpa harus memikirkan ruang nama.Contoh
sumber
Jika Anda memiliki referensi ke kelas itu sendiri, maka Anda dapat melakukan hal berikut:
sumber
Masalah saya mirip dengan subjek ini. Jika Anda memiliki objek, tetapi bukan nama kelasnya, Anda dapat menggunakan:
sumber