Artikel ini akan memberi anda analisis mendalam tentang operator "? :" (ungkapan ternari) dalam PHP untuk melihat fungsinya, cara menggunakannya dan apakah kesannya? Semoga ia membantu semua orang!
Apakah rupa pengendali ?
dan :
dalam PHP?
adalah seperti berikut:
(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)
Ia ialah pengendali bersyarat.
$x ? $y : $z
bermaksud "Jika $x benar, maka gunakan $y; jika tidak, gunakan $z".
Ia juga boleh dipermudahkan.
$x ?: $z
bermaksud "Jika $x benar, maka gunakan $x; jika tidak, gunakan $z".
Ada yang mungkin berkata ?: ialah "pengendali ternari". Ini tidak betul. ?: Jika ia adalah pengendali ternary, maka ia sepatutnya mempunyai tiga operan. Sebabnya ialah ia secara amnya satu-satunya pengendali ternary dalam bahasa semasa.
Berikut akan memperkenalkan apa itu ternary, cara menggunakannya, bila hendak menggunakannya, mengapa menggunakannya, dan bila tidak menggunakannya.
Apakah pengendali ternary?
? :
ialah singkatan daripada if
dan else
. Terdapat penerangan rasmi "pengendali ternary" di tengah.
Sejak PHP 5.3:
Setakat PHP 5.3, bahagian tengah pengendali ternary boleh diabaikan. Ungkapan expr1 ?: expr3 mengembalikan expr1 jika expr1 adalah BENAR dan expr3 sebaliknya.
Sejak PHP 7.0
PHP 7 mempunyai pengendali penggabungan Null baharu. Ini adalah sama dengan pengendali ternary, juga dikenali sebagai "operator ternary isset". Ini mengalih keluar isset() daripada aritmetik ternary berantai.
Dalam PHP 5, jika anda menggunakan operator ternary pada pembolehubah yang mungkin tidak wujud, anda mesti menggunakan isset() pada permulaan pernyataan ternary:
$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;
Dalam PHP 7, anda boleh melakukan ini:
$result = $nonExistentVariable ?? ‘default’;
Ingat bahawa pengendali penyatuan Null tidak boleh mengendalikan rentetan kosong. Anda boleh menggunakannya dalam rantaian untuk menyemak berbilang pembolehubah:
$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;
Dalam PHP, adalah perkara biasa bagi pentadbir untuk berpura-pura menjadi pengguna untuk menguji dalam sistem yang boleh dilog masuk. Seperti di atas, jika pengguna tidak menyamar sebagai pengguna lain dan tidak log masuk, dia akan menjadi tetamu. Jika anda masih tidak faham, teruskan membaca untuk mengetahui apakah operator ternary dan cara menggunakannya Kemudian lihat kembali dan lihat cara menggunakan operator ternary dalam PHP baharu
. simbol?
Normal if
pernyataan adalah seperti berikut:
if (isset($_POST['hello'])) { $var = 'exists'; } else { $var = 'error'; }
Gunakan operator ternary untuk memudahkan.
$var = isset($_POST['hello']) ? 'exists' : 'error'; ^ ^ ^ ^ | | then | else | | | | if post isset $var=this $var=this
Lebih pendek, tetapi lebih sukar untuk difahami. Ini boleh digunakan bukan sahaja pada pembolehubah $var
seperti di atas, tetapi juga pada echo
seperti di bawah untuk menyemak sama ada pembolehubah itu palsu:
$isWinner = false; // 输出 'you lose' echo ($isWinner) ? 'You win!' : 'You lose'; // 同上 return ($isWinner) ? 'You win!' : 'You lose';
Mengapa?
Saya dapati aritmetik ternary menarik. Sesetengah pembangun mahukan prestasi, tetapi pengendali ternary bagus, terutamanya apabila digabungkan dengan ciri lain, seperti gema pendek terbaharu dalam PHP 5.4.
<?php $array = array(0 => 'orange', 1 => 'multicoloured'); ?> <p> <?php foreach ($array as $key => $value) { ?> <span><?=($value==='multicoloured')?'nonsense':'pointless'?></span> <?php } ?> </p> <!-- Outputs: <span> pointless </span> <span> nonsense </span> -->
Sedikit di luar topik, dalam 'view/template' (perhatikan contoh MVC), jika anda ingin menggunakan beberapa logik sisi pelayan, menggunakan operator ternary atau ayat pendek lain akan menjadi cara terbaik. "Ayat pendek lain", seperti berikut:
if ($isWinner) : // Show something cool endif;
Perhatian, saya secara peribadi tidak suka ayat pendek yang tidak bermakna itu.
Berapa pantaskah operator ternary?
Orang ramai suka pengoptimuman mikro. Ini juga dilakukan. Oleh itu, adalah penting untuk mengetahui sejauh mana operasi ternary lebih pantas daripada kenyataan if
/ else
biasa.
Daripada artikel itu, saya mengetahui bahawa ia adalah kira-kira 0.5ms lebih pantas. Ini sudah jauh lebih pantas!
Tunggu, bukan begitu. Kesimpulan ini datang daripada berulang kali melakukan beribu-ribu operasi pada satu baris kod. Jadi jangan risau sama sekali, ia tidak berguna.
Pengendali ternary bukan praktikal
Kod tersebut hendaklah:
Jelas sekali, ini bergantung pada keupayaan pengekodan orang yang melihat kod dan keupayaan untuk memahami masalah sedemikian. Tidak ada masalah dengan contoh mudah sebelum ini, tetapi yang berikut adalah tidak bagus:
echo ($colour === 'red') ? "Omg we're going to die" : ($colour === 'blue' ? "Ah sunshine and daisies" : ($colour === 'green' ? "Trees are green" : "The bloody colour is orange, isn't it? That was pointless."));
Sebabnya seperti berikut:
switch
pernyataan Ringkasan
Aritmetik ternary sebenarnya sangat mudah, jadi tidak perlu takut. Jangan fikir ada sebarang peningkatan kelajuan, memang tiada perbezaan. Gunakan apabila anda boleh membuat keputusan mudah, kelihatan bagus dan sentiasa pastikan kod boleh dibaca. Jangan gunakan operator ternary tanpa ternary.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Analisis mendalam tentang pengendali '? :' dalam PHP dan penggunaannya!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!