Bagaimana cara mendapatkan properti di PHP berdasarkan string? Saya akan menyebutnya magic
. Jadi apa magic
?
$obj->Name = 'something';
$get = $obj->Name;
akan menjadi...
magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
php
string
oop
properties
Daniel A. White
sumber
sumber
ArrayAccess
,,Countable
dan salah satu antarmuka iterator, itu sebagian besar tidak dapat dibedakan dari normalarray()
Jika Anda ingin mengakses properti tanpa membuat variabel perantara, gunakan
{}
notasi:Itu juga memungkinkan Anda untuk membangun nama properti dalam satu lingkaran misalnya:
sumber
$this->{$property}[$name]
, jika tidak$this->$property[$name]
akan menimbulkan kesalahan$this->$property[$name]
mungkin benar-benar berhasil, meskipun ini kemungkinan merupakan bug.$name
diam-diam dilemparkan ke bilangan bulat. Dalam kasus string non-numerik ini0
. Kemudian indeks string dari nilai$property
ini digunakan sebagai nama properti. Jika$property
memegang nilai "abc", maka ini akan merujuk ke properti$this->a
(indeks 0). Jika ada properti seperti itu maka ini akan berhasil.Apa yang Anda tanyakan disebut Variabel Variabel . Yang perlu Anda lakukan adalah menyimpan string Anda dalam variabel dan mengaksesnya seperti ini:
sumber
Sesuatu seperti ini? Belum mengujinya tetapi harus bekerja dengan baik.
sumber
Cukup simpan nama properti dalam variabel, dan gunakan variabel untuk mengakses properti. Seperti ini:
sumber
Mungkin ada jawaban untuk pertanyaan ini, tetapi Anda mungkin ingin melihat migrasi ini ke PHP 7
sumber: php.net
sumber
Sederhana, $ obj -> {$ obj-> Name} kurung keriting akan membungkus properti seperti variabel variabel.
Ini adalah pencarian teratas. Tetapi tidak menyelesaikan pertanyaan saya, yang menggunakan $ this. Dalam hal keadaan saya menggunakan braket keriting juga membantu ...
contoh dengan Code Igniter get instance
di kelas pustaka sumber yang disebut sesuatu dengan instance kelas induk
kelas perpustakaan yang perlu sumber dari kelas lain juga dengan contoh orang tua
sumber
Sama seperti tambahan: Dengan cara ini Anda dapat mengakses properti dengan nama yang tidak dapat digunakan
(bukan bahwa Anda harus, tetapi jika Anda harus).Jika Anda ingin melakukan hal-hal yang lebih mewah, Anda harus melihat ke dalam refleksi
sumber
Seandainya ada orang lain yang ingin menemukan properti yang dalam dari kedalaman yang tidak diketahui, saya datang dengan yang di bawah ini tanpa perlu mengulang semua properti yang diketahui dari semua anak.
Misalnya, untuk menemukan $ Foo-> Bar-> baz, atau $ Foo-> baz, atau $ Foo-> Bar-> Baz-> dave, di mana $ path adalah string seperti 'foo / bar / baz'.
Dan kemudian panggil dengan sesuatu seperti:
sumber
Ini usahaku. Ini memiliki beberapa pemeriksaan 'kebodohan' yang umum, memastikan Anda tidak mencoba mengatur atau mendapatkan anggota yang tidak tersedia.
Anda dapat memindahkan cek 'property_exists' tersebut ke __set dan __get masing-masing dan memanggilnya langsung dalam magic ().
sumber
Apa fungsi ini adalah memeriksa apakah properti ada di kelas ini dari salah satu anaknya, dan jika demikian ia mendapat nilai sebaliknya mengembalikan nol. Jadi sekarang propertinya opsional dan dinamis.
Pemakaian:
sumber
why edit: before: using eval (evil) after: no eval at all. sudah tua dalam bahasa ini.
sumber