Apakah ada cara di PHP untuk memasukkan konstanta dalam string tanpa menyatukan?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
php
string
constants
concatenation
Brian
sumber
sumber
Jawaban:
Tidak.
Dengan Strings, tidak ada cara bagi PHP untuk membedakan data string dari pengidentifikasi konstan. Ini berlaku untuk semua format string dalam PHP, termasuk heredoc.
constant()
adalah cara alternatif untuk mendapatkan konstanta, tetapi pemanggilan fungsi tidak dapat dimasukkan ke dalam string tanpa penggabungan.Manual tentang konstanta dalam PHP
sumber
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
Ya itu (dalam beberapa cara;)):
Ini mungkin bukan apa yang Anda tuju, tapi saya pikir, secara teknis ini bukan gabungan tetapi substitusi dan dari asumsi ini, itu termasuk konstanta dalam string tanpa menyatukan .
sumber
Untuk menggunakan konstanta di dalam string Anda dapat menggunakan metode berikut:
Bagaimana cara kerjanya?
Anda dapat menggunakan nama fungsi string apa saja dan parameter arbitrer
Satu dapat menempatkan nama fungsi apa pun dalam variabel dan menyebutnya dengan parameter di dalam string yang dikutip ganda. Bekerja dengan beberapa parameter juga.
Menghasilkan
Fungsi anonim juga
Anda juga dapat menggunakan fungsi anonim asalkan Anda menjalankan PHP 5.3+.
Menghasilkan html lolos dengan benar seperti yang diharapkan.
Array panggilan balik tidak diizinkan!
Jika saat ini Anda berada di bawah kesan bahwa nama fungsi dapat dipanggil apa saja, itu tidak terjadi, karena array yang mengembalikan true ketika diteruskan
is_callable
akan menyebabkan kesalahan fatal ketika digunakan di dalam string:Mengingat
Praktek ini keliru, tetapi terkadang menghasilkan kode yang lebih mudah dibaca, jadi terserah Anda - kemungkinan ada di sana.
sumber
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. Versi Thetaiko menghilangkan kebutuhan akan tanda kutip, dan garis bawah itu lucu.sumber
sumber
Jika Anda benar - benar ingin menggemakan konstanta tanpa penggabungan berikut ini solusinya:
Catatan : dalam contoh ini gema mengambil sejumlah parameter ( lihat koma ), jadi itu bukan penggabungan nyata
Echo berperilaku sebagai fungsi, dibutuhkan lebih banyak parameter, lebih efisien daripada penggabungan, karena tidak harus menyatukan dan kemudian menggema, itu hanya menggemakan semuanya tanpa perlu membuat objek gabungan String baru :))
EDIT
Juga jika Anda mempertimbangkan string rangkaian , string string sebagai parameter atau menulis string keseluruhan dengan " , The , (versi koma) selalu tercepat, selanjutnya . (Gabungan dengan ' tanda kutip tunggal) dan metode pembuatan string paling lambat menggunakan tanda kutip ganda " , karena ekspresi yang ditulis dengan cara ini harus dievaluasi terhadap variabel dan fungsi yang dideklarasikan.
sumber
Anda bisa melakukannya:
sumber
Cara termudah adalah
Cara lain menggunakan
(s)printf
sumber
Seperti yang orang lain tunjukkan, Anda tidak bisa melakukan itu. PHP memiliki fungsi
constant()
yang tidak dapat dipanggil secara langsung dalam sebuah string tetapi kita dapat dengan mudah mengatasi ini.dan contoh dasar tentang penggunaannya:
sumber
$constant = 'constant';
alih - alih mendefinisikan fungsi lain, dan itu akan bekerja secara identik karena fungsi itu sudah ada.Berikut adalah beberapa alternatif untuk jawaban lain, yang sepertinya lebih difokuskan pada trik "{$}". Meskipun tidak ada jaminan atas kecepatan mereka; ini semua adalah gula sintaksis murni. Untuk contoh-contoh ini, kita asumsikan seperangkat konstanta di bawah ini didefinisikan.
Menggunakan ekstrak ()
Yang ini bagus karena hasilnya identik dengan variabel. Pertama, Anda membuat fungsi yang dapat digunakan kembali:
Kemudian panggil dari ruang lingkup apa pun:
Di sini, ini menurunkan konstanta agar lebih mudah di jari Anda, tetapi Anda dapat menghapus array_change_key_case () agar tetap seperti semula. Jika Anda sudah memiliki nama variabel lokal yang saling bertentangan, konstanta tidak akan menimpanya.
Menggunakan penggantian string
Yang ini mirip dengan sprintf (), tetapi menggunakan token pengganti tunggal dan menerima jumlah argumen yang tidak terbatas. Saya yakin ada cara yang lebih baik untuk melakukan ini, tetapi maafkan kekonyolan saya dan cobalah untuk fokus pada ide di baliknya.
Seperti sebelumnya, Anda membuat fungsi yang dapat digunakan kembali:
Kemudian panggil dari ruang lingkup apa pun:
Anda dapat menggunakan token pengganti apa pun yang Anda inginkan, seperti% atau #. Saya menggunakan slash di sini karena sedikit lebih mudah untuk mengetik.
sumber
Sangat menyenangkan bahwa Anda dapat menggunakan kata kunci 'const' sebagai nama untuk fungsi Anda untuk mencegah pengotoran namespace:
Anda juga dapat menggunakan $ GLOBALS untuk menyebarkan fungsi 'const' di seluruh kode:
Tidak yakin apakah aman untuk digunakan di masa mendatang. Dan apa yang lebih buruk - masih terlihat jelek.
sumber
Saya percaya ini menjawab pertanyaan awal OP. Satu-satunya hal adalah kunci indeks global tampaknya hanya berfungsi sebagai huruf kecil.
Keluaran:
sumber
an associative array containing references to all variables
.$db_user = 'root';