Saya menggunakan mesin template yang memasukkan kode ke situs saya di tempat yang saya inginkan.
Saya menulis sebuah fungsi untuk menguji sesuatu yang cukup mudah:
myfunction() { return '($this->data["a"]["b"] ? true : false)'; }
Masalahnya adalah, $ this-> data bersifat pribadi, dan saya tidak dapat mengaksesnya di mana pun, jadi saya harus menggunakan getData (); yang menyebabkan masalah saya.
$this->getData()['a']['b']
tidak berfungsi, dan menetapkan nilai terlebih dahulu juga tidak baik karena akan digunakan secara langsung di blok if ().
Ada ide?
myfunction()
diproses lebih lanjut? Bagian itu hilang dalam pertanyaan Anda.Jawaban:
Sejak PHP 5.4, dimungkinkan untuk melakukan hal itu:
getSomeArray()[2]
Referensi: https://secure.php.net/manual/en/language.types.array.php#example-62
Di PHP 5.3 atau sebelumnya, Anda harus menggunakan variabel sementara.
sumber
PHP 5.4.11-1~precise+1
dan fitur ini tidak berfungsi! Mendapat pesan sebagai tanggapanParse error: syntax error, unexpected '['
Anda tidak dapat menggunakan sesuatu seperti ini:
$this->getData()['a']['b']
yaitu, sintaks akses array tidak dimungkinkan secara langsung pada pemanggilan fungsi.
Anda harus menggunakan beberapa variabel sementara , seperti ini:
$tmp = $this->getData(); $tmp['a']['b'] // use $tmp, now
Dalam kasus Anda, ini mungkin berarti menggunakan sesuatu seperti ini:
function myfunction() { $tmp = $this->getData(); return ($tmp['a']['b'] ? true : false); }
Kamu harus :
getData()
metode Anda , dan simpan nilai kembaliannya dalam varibale sementaraAnda tidak punya banyak pilihan tentang itu, sebenarnya ...
sumber
Oke ... ternyata benar-benar tidak ada cara yang lebih baik, jadi saya akan menjawab sendiri dengan solusi yang tidak begitu indah:
Saya membuat fungsinya:
arrayGet($array, $index) { return $array[$index]; }
Dan menggunakannya seperti ini:
myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' }
Ini tidak bagus tapi berhasil.
sumber
$this
->data
adalah selalu diakses, jika dilindungi. tidak dapat diakses dari mana-mana, jadi jika Anda kembali dalam kode Anda, dan dievaluasi seperti itu, seharusnya baik-baik saja.$object
->data
$this
Btw, ada bug di kode Anda: Tanda kutip harus di-escape.
myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; }
sumber
Ini dimungkinkan dari PHP versi 5.4.
Jika Anda tidak menginginkan variabel sementara untuk itu dan versi PHP Anda kurang dari 5,4 , Anda masih dapat menggunakan beberapa fungsi bawaan untuk mendapatkan elemen pertama atau terakhir:
$x = 'first?last'; $first = array_shift(explode('?', $x)); $last = end(explode('?', $x)); $last2 = array_pop(explode('?', $x));
Sunting: !!! Harap dicatat, bahwa dalam versi yang lebih baru (5.4+) PHP akan memberikan pemberitahuan, karena end hanya mengharapkan variabel sebagai parameter.
sumber