Banyak bahasa pemrograman memiliki fungsi menyatu (mengembalikan nilai non-NULL pertama, misalnya ). PHP, sayangnya pada tahun 2009, tidak.
Apa yang akan menjadi cara yang baik untuk mengimplementasikan satu di PHP sampai PHP sendiri mendapat fungsi penggabungan?
??
untuk PHP 7.Jawaban:
Ada operator baru di php 5.3 yang melakukan ini:
?:
Sumber: http://www.php.net/ChangeLog-5.php#5.3.0
sumber
$input['properties']['range_low'] ?: '?'
array() ?: null ?: false
mengembalikanfalse
. Operatornya memang waras.PHP 7 memperkenalkan operator penyatuan nyata :
Jika nilai sebelum
??
tidak ada ataunull
nilai setelah??
diambil.Peningkatan atas
?:
operator yang disebutkan adalah, bahwa??
juga menangani variabel yang tidak ditentukan tanpa melemparE_NOTICE
.sumber
($_GET['doesNotExist'] ?? null) ?: 'fallback'
?:
lebih dari??
itu adalah bahwa ia menyatukan nilai-nilai kosong juga yang??
tidak melakukannya. Mirip dengan perilaku operator OR logis dalam JavaScript (yaitu$val || 'default'
), saya akan menemukan?:
menjadi bentuk yang lebih praktis penggabungan jika dalam praktik kami, kami akhirnya menemukan diri kami menangani kosong dan nol dengan cara yang sama (yaitu$val ?: 'default'
). Dan jika Anda ingin memaksakan masalah ini lebih lanjut dan menelanE_NOTICE
, Anda dapat memperdebatkan ini bahkan:echo @$val ?: 'default';
Hit pertama untuk "php coalesce" di google.
http://drupial.com/content/php-coalesce
sumber
Saya sangat suka operator :? Sayangnya, ini belum diterapkan pada lingkungan produksi saya. Jadi saya menggunakan yang setara ini:
sumber
coalesce
seharusnya mengembalikan argumen non-nol pertama yang dihadapinya, yang akan mencakupFALSE
. Fungsi ini akan membuangFALSE
, mungkin bukan apa yang ada dalam pikiran (setidaknya bukan apa yang saya inginkan dari suatucoalesce
fungsi).Perlu dicatat bahwa karena perlakuan PHP terhadap variabel yang tidak diinisialisasi dan indeks array, segala jenis fungsi gabungan adalah penggunaan terbatas. Saya ingin sekali dapat melakukan ini:
Tetapi ini akan, dalam banyak kasus, menyebabkan kesalahan PHP dengan E_NOTICE. Satu-satunya cara aman untuk menguji keberadaan suatu variabel sebelum menggunakannya adalah menggunakannya secara langsung di blank () atau isset (). Operator ternary yang disarankan oleh Kevin adalah opsi terbaik jika Anda tahu bahwa semua opsi dalam gabungan Anda diketahui diinisialisasi.
sumber
$getstuff = $_GET+$_SESSION+array('id'=>null);$id=$getstuff['id'];
).??
untuk menjadikan operasi yang sangat umum ini lebih ringkas.Pastikan Anda mengidentifikasi dengan tepat bagaimana Anda ingin fungsi ini bekerja dengan tipe tertentu. PHP memiliki beragam jenis pemeriksaan fungsi atau sejenisnya, jadi pastikan Anda tahu cara kerjanya. Ini adalah contoh perbandingan is_null () dan kosong ()
Seperti yang Anda lihat, kosong () mengembalikan true untuk semua ini, tetapi is_null () hanya melakukannya untuk 2 dari mereka.
sumber
Saya memperluas jawaban yang diposting oleh Ethan Kent . Jawaban itu akan membuang argumen non-nol yang mengevaluasi menjadi false karena cara kerja array_filter , yang bukan apa
coalesce
fungsi biasanya. Sebagai contoh:Untuk mengatasi ini, argumen kedua dan definisi fungsi diperlukan. Fungsi yang dapat dipanggil bertanggung jawab untuk memberi tahu
array_filter
apakah akan menambahkan nilai array saat ini ke array hasil atau tidak:Akan lebih baik jika Anda bisa melewati
isset
atau'isset'
sebagai argumen ke-2array_filter
, tetapi tidak beruntung.sumber
Saya sedang menggunakan ini, tapi saya ingin tahu apakah itu tidak dapat ditingkatkan dengan beberapa fitur baru di PHP 5.
sumber
PHP 5.3+, dengan penutupan:
Demo: https://eval.in/187365
sumber