Berdasarkan contoh dari halaman ini , saya memiliki contoh kode yang berfungsi dan tidak berfungsi di bawah ini.
Kode kerja menggunakan if
pernyataan:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Kode tidak berfungsi menggunakan operator terner:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
UPDATE
Setelah tip Brian, saya menemukan bahwa $test
output bergema hasil yang diharapkan. Berikut ini bekerja seperti pesona!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Jawaban:
Itu
sintaks bukan operator "shorthand if" (
?
disebut operator bersyarat) karena Anda tidak dapat mengeksekusi kode dengan cara yang sama seperti jika Anda melakukannya:Dalam contoh Anda, Anda menjalankan
echo
pernyataan saat$address
isian tidak kosong. Anda tidak dapat melakukan ini dengan cara yang sama dengan operator bersyarat. Namun, apa yang dapat Anda lakukan adalahecho
hasil dari operator bersyarat:dan ini akan menampilkan "Jalan kosong!" jika kosong, jika tidak maka akan menampilkan alamat jalan2.
sumber
condition ?: false
yang mengevaluasicondition
apakah itu benar?PHP 7+
Mulai dari PHP 7, tugas ini dapat dilakukan hanya dengan menggunakan operator penggabungan Null seperti ini:
echo !empty($address['street2']) ?? 'Empty';
sumber
$address['street2']
adalah string kosong. Ia akan menerimanya dan tidak akan kembali'Empty'
.isset() != empty()
. Ini hanya akan berfungsi jika nilainya adalahnull
$address['street2']
tidak kosong?echo $address['street2'] ?? 'Empty';
namun seperti yang disebutkan, ini adalah " operator penggabungan null " sehingga hanya menguji null dan tidak kosong. Hal ini karena ?? Secara efektif merupakan singkatan dari isset ().Deklarasi Dasar Benar / Salah
Pesan Selamat Datang Bersyarat
Pesan Item Bersyarat
ref: https://davidwalsh.name/php-ternary-examples
sumber
)
tempat. Ini harus mendahului?
. Pernyataan lengkapnya harus$is_admin = ($user['permissions'] == 'admin') ? true : false;
Operator terner hanyalah singkatan dari dan if / else. Kode kerja Anda tidak memiliki ketentuan lain, jadi tidak cocok untuk ini.
Contoh berikut akan berfungsi:
sumber
Ini adalah operator Ternary alias operator Elvis (google it: P) yang Anda cari.
Ini mengembalikan nilai variabel atau default jika variabel kosong.
sumber
Perhatikan bahwa saat menggunakan operator bersyarat bersarang, Anda mungkin ingin menggunakan tanda kurung untuk menghindari kemungkinan masalah!
Sepertinya PHP tidak bekerja dengan cara yang sama seperti setidaknya Javascript atau C #.
Kode yang sama di Javascript dan C # menghasilkan "Luar Biasa" dalam kedua kasus.
Dalam kasus ke-2, apa yang dilakukan PHP adalah (atau setidaknya itulah yang saya mengerti):
$score > 10
? Iya$age > 10
? tidak, jadi saat ini$age > 10 ? 'Average' : 'Exceptional'
mengembalikan 'Luar Biasa''Exceptional' ? 'Horrible' : 'Average'
yang mengembalikan 'Mengerikan', karena 'Luar Biasa' adalah benarDari dokumentasi: http://php.net/manual/en/language.operators.comparison.php
sumber
Cara cepat dan singkat:
Berikut beberapa contoh yang menarik, dengan satu atau lebih kondisi yang bervariasi.
sumber
Pesan Selamat Datang Bersyarat
Singkatan PHP Bersarang
sumber
Anda dapat melakukan ini lebih pendek lagi dengan mengganti
echo
dengan<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Ini berguna terutama ketika Anda ingin menentukan, di dalam bilah navigasi, apakah opsi menu harus ditampilkan sebagai telah dikunjungi (diklik) atau tidak:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
sumber
Saya pikir Anda menggunakan tanda kurung dengan cara yang salah. Coba ini:
Saya pikir itu harus berfungsi, Anda juga dapat menggunakan:
sumber
Saya pikir Anda mungkin sebaiknya tidak menggunakan operator terner di php. Pertimbangkan contoh selanjutnya:
Bagaimana menurut Anda,
$a
variabel apa yang akan berisi? (petunjuk: dos) Dan itu akan tetap sama meskipun$foo
variabel akan ditetapkan ke 2.Untuk membuat segalanya lebih baik, Anda harus menolak menggunakan operator ini atau mengelilingi bagian kanan dengan kawat gigi dengan cara berikut:
sumber
Operator Ternary pada dasarnya adalah singkatan dari pernyataan if / else. Kita dapat menggunakan untuk mengurangi beberapa baris kode dan meningkatkan keterbacaan.
Kode Anda terlihat lebih bersih bagi saya. Tapi kita bisa menambahkan cara yang lebih bersih sebagai berikut-
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Cara lain-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Catatan- Saya telah menambahkan tanda kurung ke seluruh ekspresi untuk membuatnya lebih bersih. Saya biasanya melakukan ini untuk meningkatkan keterbacaan. Dengan PHP7 kita bisa menggunakan Null Coalescing Operator / php 7 ?? operator untuk pendekatan yang lebih baik. Tapi kebutuhan Anda itu tidak sesuai.
sumber
Ada juga operator terner steno dan terlihat seperti ini:
(ekspresi1)?: ekspresi2 akan mengembalikan ekspresi1 jika dievaluasi benar atau ekspresi2 sebaliknya.
Contoh:
akan kembali
Dari Manual PHP
sumber