Ini gagal:
define('DEFAULT_ROLES', array('guy', 'development team'));
Rupanya, konstanta tidak dapat menahan array. Apa cara terbaik untuk mengatasi ini?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
Ini sepertinya upaya yang tidak perlu.
Jawaban:
CATATAN: sementara ini adalah jawaban yang diterima, perlu dicatat bahwa dalam PHP 5.6+ Anda dapat memiliki array const - lihat jawaban Andrea Faulds di bawah ini .
Anda juga bisa membuat serialisasi array Anda dan kemudian memasukkannya ke dalam konstanta:
sumber
$fruit = FRUITS[0];
Sejak PHP 5.6, Anda dapat mendeklarasikan konstanta array dengan
const
:Sintaks pendek juga berfungsi, seperti yang Anda harapkan:
Jika Anda memiliki PHP 7, Anda akhirnya dapat menggunakan
define()
, seperti yang pertama kali Anda coba:sumber
define()
di sini di PHP 5.6, tetapi ini telah diperbaiki untuk PHP 7.0 . :)Anda bisa menyimpannya sebagai variabel statis suatu kelas:
Jika Anda tidak menyukai gagasan bahwa array dapat diubah oleh orang lain, seorang pengambil dapat membantu:
EDIT
Sejak PHP5.4, bahkan dimungkinkan untuk mengakses nilai-nilai array tanpa perlu variabel perantara, yaitu yang berikut berfungsi:
sumber
const AtomicValue =42; public static $fooArray = ('how','di')
Saya menggunakannya seperti ini. Saya harap, ini akan membantu orang lain.
config.php
Dalam file, di mana saya membutuhkan konstanta.
sumber
Inilah yang saya gunakan. Ini mirip dengan contoh yang diberikan oleh soulmerge, tetapi dengan cara ini Anda bisa mendapatkan array penuh atau hanya satu nilai tunggal dalam array.
Gunakan seperti ini:
sumber
Anda bisa menyimpannya sebagai string JSON dalam konstanta. Dan sudut pandang aplikasi, JSON dapat berguna dalam kasus lain.
sumber
Dimulai dengan PHP 5.6, Anda dapat menentukan array konstan menggunakan
const
kata kunci seperti di bawah inidan berbagai elemen dapat diakses seperti di bawah ini:
Dimulai dengan PHP 7, array konstan dapat didefinisikan menggunakan
define
seperti di bawah ini:dan berbagai elemen dapat diakses dengan cara yang sama seperti sebelumnya.
sumber
Saya tahu ini pertanyaan yang agak lama, tapi ini solusinya:
Saya mendefinisikannya karena saya perlu menyimpan objek dan array dalam konstanta jadi saya menginstal juga runkit ke php sehingga saya bisa membuat variabel $ const superglobal.
Anda bisa menggunakannya sebagai
$const->define("my_constant",array("my","values"));
atau hanya$const->my_constant = array("my","values");
Untuk mendapatkan nilai cukup menelepon saja
$const->my_constant;
sumber
__get
dan__set
... Saya harus mengatakan bahwa metode ini hebat.PHP 7+
Pada PHP 7, Anda bisa menggunakan fungsi define () untuk mendefinisikan array konstan:
sumber
Bahkan dapat bekerja dengan Array Asosiatif .. misalnya di dalam kelas.
sumber
Menggunakan fungsi explode dan implode kita dapat berimprovisasi solusi:
Ini akan bergema
email
.Jika Anda ingin lebih mengoptimalkannya, Anda dapat menentukan 2 fungsi untuk melakukan hal-hal berulang untuk Anda seperti ini:
Semoga itu bisa membantu. Selamat coding.
sumber
Melakukan semacam trik ser / deser atau encode / decode tampaknya jelek dan mengharuskan Anda untuk mengingat apa yang sebenarnya Anda lakukan ketika Anda mencoba menggunakan konstanta. Saya pikir variabel statis kelas privat dengan accessor adalah solusi yang layak, tetapi saya akan melakukan yang lebih baik. Hanya memiliki metode pengambil statis publik yang mengembalikan definisi array konstan. Ini membutuhkan minimal kode tambahan dan definisi array tidak dapat dimodifikasi secara tidak sengaja.
Jika Anda benar-benar ingin membuatnya terlihat seperti konstanta yang didefinisikan, Anda dapat memberikannya semua nama kapitalisasi, tetapi akan membingungkan untuk mengingat untuk menambahkan tanda kurung '()' setelah nama.
Saya kira Anda bisa membuat metode global menjadi lebih dekat dengan fungsionalitas define () yang Anda minta, tetapi Anda benar-benar harus menentukan cakupan nama tetap dan menghindari global.
sumber
Anda dapat mendefinisikan seperti ini
sumber
Ya, Anda bisa mendefinisikan array sebagai konstanta. Dari PHP 5.6 dan selanjutnya , dimungkinkan untuk mendefinisikan konstanta sebagai ekspresi skalar, dan juga dimungkinkan untuk mendefinisikan konstanta array . Dimungkinkan untuk mendefinisikan konstanta sebagai sumber daya, tetapi harus dihindari, karena dapat menyebabkan hasil yang tidak terduga.
Dengan referensi tautan ini
Selamat coding.
sumber
Jika Anda mencari ini dari 2009, dan Anda tidak suka AbstractSingletonFactoryGenerators, berikut adalah beberapa opsi lain.
Ingat, array "disalin" ketika ditugaskan, atau dalam hal ini, dikembalikan, sehingga Anda praktis mendapatkan array yang sama setiap waktu. (Lihat perilaku array copy-on-write dalam PHP.)
sumber
jika Anda menggunakan PHP 7 & 7+, Anda dapat menggunakan fetch seperti ini juga
sumber
Konstanta hanya dapat berisi nilai skalar, saya sarankan Anda menyimpan serialisasi (atau representasi dikodekan JSON) dari array.
sumber