Apakah ada perintah dalam PHP untuk berhenti mengeksekusi pernyataan saat ini atau induknya if
, sama dengan break
atau break(1)
untuk switch
/ loop
. Sebagai contoh
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
dalam kode di atas PHP tidak akan melakukan echo "test";
dan akan pergi keecho "finish";
Saya butuh ini untuk jika
$a="test";
if("test"==$a)
{
break;
echo "yes"; // I don't want this line or lines after to be executed, without using another if
}
echo "finish";
Saya ingin break
para if
pernyataan di atas dan berhenti mengeksekusi echo "yes";
atau kode seperti yang tidak lagi diperlukan untuk dieksekusi, mungkin ada atau mungkin tidak kondisi tambahan, apakah ada cara untuk melakukan hal ini?
Pembaruan: Hanya 2 tahun setelah memposting pertanyaan ini, saya tumbuh dewasa, saya belajar bagaimana kode dapat ditulis dalam potongan kecil, mengapa bersarang jika itu bisa menjadi bau kode dan bagaimana menghindari masalah seperti itu di tempat pertama dengan menulis fungsi kecil yang dapat diatur.
echo
(dalam contoh Anda) tidak akan pernah dieksekusi. Jadi sebaiknya Anda hapus saja.try catch
pilihan?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Jawaban:
Jangan khawatir tentang komentar pengguna lain, saya bisa mengerti Anda, TERKADANG ketika mengembangkan hal-hal "mewah" ini diperlukan . Jika kita dapat memecahkan if, banyak if bersarang tidak diperlukan, membuat kode jauh lebih bersih dan estetika.
Kode sampel ini menggambarkan bahwa SITUASI TERTENTU di mana rusak jika bisa jauh lebih cocok daripada banyak ifs bersarang jelek ... jika Anda belum menghadapi situasi tertentu tidak berarti itu tidak ada .
Kode jelek
Kode yang terlihat bagus
Seperti @NiematojakTomasz mengatakan, penggunaan
goto
adalah alternatif, hal buruk tentang ini adalah Anda selalu perlu mendefinisikan label (target poin).sumber
if
elseif
pada setiap tes yang gagal. Ini persis apa yang saya cari, sekarang kode saya KISS dan DRY compliant :) Terima kasih!Enkapsulasi kode Anda dalam suatu fungsi. Anda dapat berhenti menjalankan fungsi
return
kapan saja.sumber
cara yang tepat untuk melakukan ini:
Setelah membaca beberapa komentar, saya menyadari bahwa penanganan pengecualian tidak selalu masuk akal untuk kontrol aliran normal. Untuk aliran kontrol normal, lebih baik menggunakan "If else":
Anda juga dapat menyimpan nilai pengembalian proses dalam variabel dan kemudian memeriksa blok kegagalan / pengecualian yang prosesnya gagal.
sumber
Karena Anda dapat mematahkan keluar dari do a / while, mari kita " melakukan " satu putaran. Dengan beberapa saat (false) pada akhirnya, kondisinya tidak pernah benar dan tidak akan terulang lagi.
sumber
kebagian :
sumber
goto
, Bayi Yesus makan anak kucing. Juga, xkcd.com/292goto
kata kunci dalam kode produksi dan saya tidak pernah mengalami kesulitan.Ada perintah:
goto
Namun, ingat
goto
bukan praktik yang disarankan, karena membuat kode harus diformat secara tidak biasa.sumber
Anda bisa menggunakan do-while (false):
seperti yang dijelaskan dalam http://php.net/manual/en/control-structures.if.php#90073
sumber
Tidak, tidak ada cara untuk "memecahkan" blok if seperti yang Anda lakukan di dalam loop.
:(
Jadi ubah tes Anda menjadi
switch
!Saya bertanya-tanya mengapa tidak ada yang mendorong Anda untuk menggunakan pernyataan beralih sejak (bahkan jika Anda belum banyak menguji kasus)
Apakah Anda pikir itu terlalu bertele-tele?
Saya pasti akan melakukannya di sini
Bagi saya Pengecualian dimaksudkan untuk meningkatkan kesalahan dan tidak benar-benar untuk mengontrol cacat eksekusi.
Jika perilaku break yang Anda coba setel bukan tentang kesalahan yang tidak terduga, penanganan pengecualian bukan solusi yang tepat di sini
:/
.sumber
:/
Dengan cara ini saya mendapatkan apa yang saya inginkan. Saya menggunakan switch hanya memiliki case yang pasti dan kemudian menggunakan break in case untuk memilih kondisi jika. Alasan mengapa saya menggunakan break: condition1 dan condition2 keduanya dapat memuaskan, dalam situasi itu hanya condition1 diterapkan. JIKA selektif sesuai urutan.
sumber
switch(true) { case true:
Tidak.
Tapi bagaimana dengan:
sumber
if
pernyataanif
pernyataan. Saya tidak yakin bagaimana Anda berharap untuk menghindari ini.Pindahkan kode yang tidak seharusnya dieksekusi ke
else/elseif
cabang. Saya tidak benar-benar mengerti mengapa Anda ingin melakukan apa yang Anda coba lakukan.sumber
Jawaban sederhananya adalah tidak, tidak ada cara untuk melepaskan diri dari suatu
if
pernyataan tanpa sepenuhnya menghentikan eksekusi (viaexit
). Solusi lain tidak akan berfungsi untuk saya karena saya tidak dapat mengubah strukturif
pernyataan, karena saya menyuntikkan kode ke plugin, seperti:sumber
Menjawab pertanyaan Anda apakah itu dapat dicapai atau tidak, maka ya itu dapat dicapai dengan menggunakan operator "goto" dari php.
Tapi secara etis, itu bukan praktik yang baik untuk menggunakan "goto" dan jika ada kebutuhan untuk menggunakan goto maka ini berarti bahwa kode perlu direkonstruksi sedemikian rupa sehingga persyaratan goto dapat dihapus.
Menurut kode sampel yang Anda posting di atas, dapat dilihat dengan jelas bahwa kode tersebut dapat direkonstruksi dan kode yang tidak diperlukan lagi dapat dihapus atau dikomentari (jika ada kemungkinan untuk digunakan di masa mendatang).
sumber
menggabungkan pernyataan Anda, saya pikir ini akan memberi Anda hasil yang Anda inginkan. bersih dan sederhana, tanpa terlalu banyak pernyataan.
untuk kode jelek dan tampan, rekomendasi saya adalah:
suatu tempat di kode normal Anda
sumber
Saya pikir Anda mencari ini:
Manual php menunjukkan
for
contoh, tetapi saya pikir ini juga berfungsi untukif
sumber
saya punya solusi sederhana tanpa banyak perubahan. pernyataan awal adalah
jadi, sepertinya sederhana. coba kode seperti ini.
jika Anda ingin mencoba tanpa kode ini, sederhana saja. dan Anda dapat kembali kapan saja. solusi lain adalah blok komentar. atau hanya berpikir dan mencoba kode lain yang terpisah dan salin tempel hanya hasil dalam kode akhir Anda. dan jika kode tidak lagi diperlukan, dalam kasus Anda, hasilnya bisa
dengan kode ini, pernyataan asli benar-benar dihormati .. :) dan lebih mudah dibaca!
sumber
Solusi sederhana adalah berkomentar.
Manfaat tambahannya adalah Anda tidak mengubah kode asli dan Anda dapat menentukan tanggal, menginisialisasinya dan memberikan alasan mengapa.
Mengapa suara turun, menurut permintaan OP saya pikir ini adalah solusi yang sangat valid.
"Saya ingin [memecah pernyataan if di atas dan] berhenti mengeksekusi gema" ya "; atau kode seperti itu yang tidak perlu lagi dieksekusi, mungkin ada atau mungkin tidak ada syarat tambahan, apakah ada cara untuk melakukan ini?"
Bahkan seseorang dapat melihat beberapa solusi lain, setahun kemudian dan bertanya-tanya apa yang sedang terjadi di sana. Sesuai saran saya, orang dapat meninggalkan dokumentasi yang baik untuk referensi di masa depan, yang selalu merupakan praktik yang baik.
sumber
Bagaimana dengan menggunakan operator ternary?
Yang identik dengan pernyataan if / else ini:
sumber
$a = $_POST['action'] ?? 'default';
Untuk sepenuhnya menghentikan sisa skrip agar tidak berjalan, Anda cukup melakukannya
keluar; // Di tempat istirahat. Sisa kode tidak akan dieksekusi
sumber
Saya terlambat ke pesta tetapi saya ingin berkontribusi. Saya terkejut bahwa tidak ada yang menyarankan
exit()
. Itu bagus untuk pengujian. Saya menggunakannya sepanjang waktu dan bekerja seperti pesona.Kode akan berhenti
exit()
dan semuanya tidak akan berjalan.Hasil
Ini bekerja dengan
foreach()
danwhile()
juga. Ini bekerja di mana pun Anda menempatkannya.Hasil
Gunakan dengan a
forloop()
Hasil
Dalam skenario kasus normal
Hasil
sumber
sumber