Sebagian besar jawaban tidak benar-benar membahas poin utama : yang bekerja lebih baik ketika Anda melihat beberapa kode dan ada banyak perintah penutupan seperti } } } }(yang dapat dilakukan dengan endifjuga) dan Anda ingin tahu di mana mereka terbuka? Jawabannya adalah tidak . Ini pada dasarnya "aturan" pertama dari prinsip-prinsip desain python .
cregox
7
Jelas {}lebih baik dan : endif;merupakan kekejaman yang tidak akan ada jika hidup adil. Dengan editor teks yang baik Anda akan memiliki pintasan keyboard untuk mencocokkan tanda kurung, untuk melompat Anda dari pembukaan ke penutup atau sebaliknya. Tidak ada hal semacam itu yang pernah ada untuk : endif;sintaksis yang mengerikan itu .
developerwjk
3
@developerwjk bagaimana itu tidak pernah ada?
alex
Jawaban:
177
Mereka sama tetapi yang kedua bagus jika Anda memiliki MVC dalam kode Anda dan tidak ingin memiliki banyak gema dalam kode Anda. Misalnya, dalam .phtmlfile saya (Zend Framework) saya akan menulis sesuatu seperti ini:
<?php if($this->value):?>
Hello
<?php elseif($this->asd):?>
Your name is: <?= $this->name ?><?php else:?>
You don't have a name.
<?php endif;?>
@ alex Ini akan bekerja dengan kurung keriting juga, tapi setidaknya secara pribadi saya menemukan cara semacam ini lebih jelas dalam hal-hal seperti ini. Karena mereka, Anda tahu bahwa itu adalah akhir dari suatu if, dan bukan akhir dari satu lingkaran atau semacamnya. Pikirkan Anda memiliki akhir dan akhir atau sesuatu yang serupa juga.
Svish
10
Saya tidak akan menggunakan <? =?> Karena tidak didukung di semua server, terutama yang dibagikan hosting yang tidak memungkinkan Anda untuk mengubah php.ini.
Siqi Lin
2
Poin yang bersangkutan adalah <? Php endif; ?> - Anda bisa tahu persis apa yang diakhiri bahkan dengan banyak baris HTML di antara sebelumnya jika / lain dan pernyataan ini.
Fenton
7
mengapa "yang kedua hebat jika Anda tidak ingin memiliki banyak gema dalam kode Anda"? Saya pikir itu sama untuk sintaksis tradisional {}juga. Tidak diperlukan gema tambahan <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. Apa bedanya dengan <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu
9
Tidak yakin mengapa jawaban ini adalah yang tertinggi, karena ini bukan contoh yang bagus (Anda dapat mencapai hal yang sama persis dengan kurung kurawal).
Reinier Kaper
69
Saya pribadi sangat membenci sintaks alternatif. Satu hal yang menyenangkan tentang kawat gigi adalah bahwa sebagian besar IDE, vim, dll semuanya memiliki penyorotan braket. Dalam editor teks saya, saya bisa mengklik dua kali penyangga dan itu akan menyorot seluruh potongan sehingga saya bisa melihat di mana itu berakhir dan dimulai dengan sangat mudah.
Saya tidak tahu ada satu editor yang bisa menyorot endif, endforeach, dll.
Ini seharusnya digunakan dalam templat PHP, di mana awal dan akhir blok dipisahkan oleh potongan bahasa asing. Jika IDE Anda memahami PHP dengan cukup baik untuk menguraikannya, itu juga harus disoroti endifsebagai end-of-block dengan benar. Jika tidak, Anda tidak benar-benar membeli apa pun dengan menggunakan }karena tidak cocok.
Pavel Minaev
2
Sebagian besar gagasan (setidaknya yang telah saya gunakan) hanya menyoroti {}
AntonioCS
11
Netbeans 7.x dengan senang hati menyorot pencocokan endforeach, endif, dll
Jonathan Day
@Bapak. Minaev: Pencocokan brace akan diurai dengan benar mungkin dalam 98% kasus, bahkan ada kode asing di dalamnya. Ini hanya akan gagal ketika ada tanda kurung ezoter "openning tetapi tidak menutup kode" di dalamnya. Ya, itu terjadi, tetapi jarang terjadi. Mengapa Anda berpikir bahwa "akhir-apa pun yang kompleks" pendekatan parser akan melakukan lebih baik secara praktis, daripada solusi sederhana?
PatlaDJ
Saya pikir poin paling penting adalah deskriptif , saat dibutuhkan. Jadi kita dapat dengan mudah menemukan di mana itu terbuka, terlepas dari alat apa yang perlu kita gunakan. Benar khusus untuk PHP, yang dari waktu ke waktu perlu Anda lihat menggunakan editor yang paling sederhana.
cregox
49
Saya pikir ini yang mengatakan semuanya:
sintaks alternatif ini sangat baik untuk meningkatkan keterbacaan (untuk PHP dan HTML!) dalam situasi di mana Anda memiliki campurannya.
Tetapi jika endifterlalu jauh dari koresponden ifsaya pikir itu praktik yang jauh lebih baik untuk memberikan komentar referensi untuk itu. Supaya Anda dapat dengan mudah menemukan di mana itu terbuka. Tidak peduli apa bahasa itu:
if(my_horn_is_red or her_umbrella_is_yellow){// ...// let's pretend this is a lot of code in the middleforeach(day in week){
sing(a_different_song[day]);}// ...}//if my_horn_is_red
Itu sebenarnya berlaku untuk "hal penutup" analog! ;)
Juga, secara umum, editor menangani kurung keriting dengan lebih baik, dalam arti mereka dapat mengarahkan Anda ke tempat kurung buka. Tetapi bahkan itu tidak membuat komentar deskriptif kurang valid.
setuju ini jauh lebih baik - daripada mengetik endif - Anda dapat mengatakan apa yang kondisi benar-benar lakukan.
cartalot
@cartalot mungkin akan lebih baik jika dibangun dalam bahasa tersebut (sebagai argumen penutup bernama-blok opsional), jadi kami dapat memiliki kesalahan untuk menutup blok yang salah di tempat yang salah! :)
Saya pikir itu sangat tergantung pada gaya pengkodean pribadi Anda. Jika Anda terbiasa dengan C ++, Javascript, dll., Anda mungkin merasa lebih nyaman menggunakan sintaks {}. Jika Anda terbiasa dengan Visual Basic, Anda mungkin ingin menggunakan if: endif; sintaksis.
Saya tidak yakin seseorang dapat mengatakan bahwa yang satu lebih mudah dibaca daripada yang lain - ini adalah pilihan pribadi. Saya biasanya melakukan sesuatu seperti ini:
adalah masalah pendapat. Saya bisa melihat mengapa beberapa orang merasa cara ke-2 lebih mudah - tetapi hanya jika Anda belum memprogram dalam Javascript dan C ++ sepanjang hidup Anda. :)
Tidak, tanda kurung lebih mudah dibaca (bila tidak menggunakan versi Mesir). Bahkan jika Anda melakukan kurung sehingga berjalan seperti orang Mesir, lebih mudah dibaca daripada sintaks VB karena editor teks modern akan memiliki fungsi pencocokan braket untuk membawa Anda dari membuka ke menutup braket atau sebaliknya. Tidak mungkin mereka bisa memiliki fungsi pencocokan sintaks VB. Anda juga harus mempertimbangkan, dan VB gagal total.
developerwjk
5
Saya akan menggunakan opsi pertama jika memungkinkan, terlepas dari opsi baru. Sintaksnya standar dan semua orang tahu itu. Ini juga kompatibel ke belakang.
Tetapi: Jika Anda ingin menggunakan PHP sebagai bahasa templating Anda dalam file tampilan Anda (V MVC) Anda dapat menggunakan sintaks alternatif ini untuk membedakan antara kode php yang ditulis untuk mengimplementasikan logika bisnis (Pengontrol dan Model bagian MVC) dan gui logika. Tentu saja itu tidak wajib dan Anda dapat menggunakan sintaksis apa pun yang Anda suka.
Tidak ada perbedaan teknis antara kedua sintaksis. Sintaks alternatif bukanlah hal baru; itu didukung setidaknya sejauh PHP 4, dan mungkin bahkan lebih awal.
Anda mungkin lebih suka bentuk alternatif karena secara eksplisit menyatakan struktur kontrol mana yang berakhir:, endwhilemisalnya, hanya dapat mengakhiri whileblok, sedangkan jika Anda menemukan penjepit, itu bisa menutup apa saja.
Anda mungkin lebih suka sintaksis tradisional, jika Anda menggunakan editor yang memiliki dukungan khusus untuk kurung kurawal di sintaks mirip C lainnya. Vim, misalnya, mendukung beberapa penekanan tombol untuk menavigasi ke kawat gigi yang cocok dan ke awal dan akhir dari blok yang dibatasi kurawal. Sintaks alternatif akan merusak fitur editor itu.
Editor teks yang baik akan memiliki jalan pintas yang cocok untuk membawa Anda ke tempat dimulainya. Its endif;yang akan sulit untuk menemukan awal untuk, karena mereka tidak akan memiliki fungsi yang sama untuk itu, dan kode VB-gaya tidak sarang dengan baik.
developerwjk
3
Itu semua tergantung, secara pribadi saya lebih suka sintaksis tradisional dengan gema dan banyak lekukan, karena itu jauh lebih mudah dibaca.
<?php
if($something){
doThis();}else{
echo '<h1>Title</h1>
<p>This is a paragraph</p>
<p>and another paragraph</p>';}?>
Saya setuju bahwa sintaks alt lebih bersih dengan klausa akhir yang berbeda, tapi saya benar-benar kesulitan berurusan dengan mereka tanpa bantuan dari penyorotan editor teks, dan saya tidak terbiasa melihat kode "kental" seperti ini:
Saya dulu menggunakan kurung kurawal tetapi sekarang beberapa hari saya lebih suka menggunakan sintaks alternatif tangan pendek ini karena keterbacaan kode dan aksesibilitas.
jika Anda membaca keseluruhan utasnya: sintaksis alternatif lebih disukai dan lebih <em> bersih </em> saat menggunakan atau menggunakan bahasa asing dalam tampilan php
Juraj Blahunka
1
Saya dulu menggunakan kurung keriting untuk kondisi "jika ada". Namun, saya menemukan "if (xxx): endif;" lebih semantik jika kodenya terbungkus tebal dan lebih mudah dibaca di editor mana pun.
Tentu saja, banyak editor yang mampu mengenali dan menyorot potongan kode ketika kurung keriting dipilih. Beberapa juga melakukannya dengan baik pada pasangan "if (xxx): endif" (mis., NetBeans)
Secara pribadi, saya akan merekomendasikan "if (xxx): endif", tetapi untuk pemeriksaan kondisi kecil (misalnya, hanya satu baris kode), tidak ada banyak perbedaan.
Saya merasa bahwa tidak ada jawaban yang sudah ada sepenuhnya mengidentifikasi jawaban di sini, jadi saya akan mengartikulasikan perspektif saya sendiri. Secara fungsional, kedua metode itu sama. Jika pemrogram terbiasa dengan bahasa lain mengikuti sintaks C, maka mereka kemungkinan akan merasa lebih nyaman dengan kawat gigi, atau jika php adalah bahasa pertama yang mereka pelajari, mereka akan merasa lebih nyaman denganifendif sintaksis, karena sepertinya lebih dekat ke bahasa reguler.
Jika Anda seorang programmer yang benar-benar serius dan perlu menyelesaikan sesuatu dengan cepat, maka saya percaya bahwa sintaks kurung kurawal lebih unggul karena menghemat waktu mengetik
if(/*condition*/){/*body*/}
dibandingkan dengan
if(/*condition*/):/*body*/
endif;
Ini khususnya benar dengan loop lain, katakanlah, di foreachmana Anda akhirnya mengetik 10 karakter tambahan. Dengan kawat gigi, Anda hanya perlu mengetikkan dua karakter, tetapi untuk sintaksis berbasis kata kunci Anda harus mengetikkan seluruh kata kunci tambahan untuk setiap loop dan pernyataan kondisional.
} } } }
(yang dapat dilakukan denganendif
juga) dan Anda ingin tahu di mana mereka terbuka? Jawabannya adalah tidak . Ini pada dasarnya "aturan" pertama dari prinsip-prinsip desain python .{}
lebih baik dan: endif;
merupakan kekejaman yang tidak akan ada jika hidup adil. Dengan editor teks yang baik Anda akan memiliki pintasan keyboard untuk mencocokkan tanda kurung, untuk melompat Anda dari pembukaan ke penutup atau sebaliknya. Tidak ada hal semacam itu yang pernah ada untuk: endif;
sintaksis yang mengerikan itu .Jawaban:
Mereka sama tetapi yang kedua bagus jika Anda memiliki MVC dalam kode Anda dan tidak ingin memiliki banyak gema dalam kode Anda. Misalnya, dalam
.phtml
file saya (Zend Framework) saya akan menulis sesuatu seperti ini:sumber
{}
juga. Tidak diperlukan gema tambahan<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. Apa bedanya dengan<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Saya pribadi sangat membenci sintaks alternatif. Satu hal yang menyenangkan tentang kawat gigi adalah bahwa sebagian besar IDE, vim, dll semuanya memiliki penyorotan braket. Dalam editor teks saya, saya bisa mengklik dua kali penyangga dan itu akan menyorot seluruh potongan sehingga saya bisa melihat di mana itu berakhir dan dimulai dengan sangat mudah.
Saya tidak tahu ada satu editor yang bisa menyorot endif, endforeach, dll.
sumber
endif
sebagai end-of-block dengan benar. Jika tidak, Anda tidak benar-benar membeli apa pun dengan menggunakan}
karena tidak cocok.Saya pikir ini yang mengatakan semuanya:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Saat mencampur HTML dengan PHP, sytnax alternatif lebih mudah dibaca. Dalam dokumen PHP normal, sintaksis tradisional harus digunakan.
sumber
Di perusahaan kami, cara yang disukai untuk menangani HTML adalah:
Pada akhirnya, itu benar-benar masalah memilih satu dan tetap menggunakannya.
sumber
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Keduanya memang sama, secara fungsional.
Tetapi jika
endif
terlalu jauh dari korespondenif
saya pikir itu praktik yang jauh lebih baik untuk memberikan komentar referensi untuk itu. Supaya Anda dapat dengan mudah menemukan di mana itu terbuka. Tidak peduli apa bahasa itu:Itu sebenarnya berlaku untuk "hal penutup" analog! ;)
Juga, secara umum, editor menangani kurung keriting dengan lebih baik, dalam arti mereka dapat mengarahkan Anda ke tempat kurung buka. Tetapi bahkan itu tidak membuat komentar deskriptif kurang valid.
sumber
Di sinilah Anda dapat menemukannya di dokumentasi resmi: PHP: Sintaks alternatif untuk struktur kontrol
sumber
Saya pikir itu sangat jelas ketika Anda menggunakan skrip
if
s,for
s danforeach
es dalam tampilan:sebagai lawan:
Ini sangat berguna untuk pernyataan kontrol panjang di mana Anda mungkin tidak dapat melihat deklarasi atas dari penjepit bawah.
sumber
Saya pikir itu sangat tergantung pada gaya pengkodean pribadi Anda. Jika Anda terbiasa dengan C ++, Javascript, dll., Anda mungkin merasa lebih nyaman menggunakan sintaks {}. Jika Anda terbiasa dengan Visual Basic, Anda mungkin ingin menggunakan if: endif; sintaksis.
Saya tidak yakin seseorang dapat mengatakan bahwa yang satu lebih mudah dibaca daripada yang lain - ini adalah pilihan pribadi. Saya biasanya melakukan sesuatu seperti ini:
Apakah itu lebih mudah dibaca daripada:
adalah masalah pendapat. Saya bisa melihat mengapa beberapa orang merasa cara ke-2 lebih mudah - tetapi hanya jika Anda belum memprogram dalam Javascript dan C ++ sepanjang hidup Anda. :)
sumber
Saya akan menggunakan opsi pertama jika memungkinkan, terlepas dari opsi baru. Sintaksnya standar dan semua orang tahu itu. Ini juga kompatibel ke belakang.
sumber
Keduanya sama.
Tetapi: Jika Anda ingin menggunakan PHP sebagai bahasa templating Anda dalam file tampilan Anda (V MVC) Anda dapat menggunakan sintaks alternatif ini untuk membedakan antara kode php yang ditulis untuk mengimplementasikan logika bisnis (Pengontrol dan Model bagian MVC) dan gui logika. Tentu saja itu tidak wajib dan Anda dapat menggunakan sintaksis apa pun yang Anda suka.
ZF menggunakan pendekatan itu.
sumber
Tidak ada perbedaan teknis antara kedua sintaksis. Sintaks alternatif bukanlah hal baru; itu didukung setidaknya sejauh PHP 4, dan mungkin bahkan lebih awal.
Anda mungkin lebih suka bentuk alternatif karena secara eksplisit menyatakan struktur kontrol mana yang berakhir:,
endwhile
misalnya, hanya dapat mengakhiriwhile
blok, sedangkan jika Anda menemukan penjepit, itu bisa menutup apa saja.Anda mungkin lebih suka sintaksis tradisional, jika Anda menggunakan editor yang memiliki dukungan khusus untuk kurung kurawal di sintaks mirip C lainnya. Vim, misalnya, mendukung beberapa penekanan tombol untuk menavigasi ke kawat gigi yang cocok dan ke awal dan akhir dari blok yang dibatasi kurawal. Sintaks alternatif akan merusak fitur editor itu.
sumber
Pada akhirnya Anda tidak ingin mencari baris berikut dan kemudian harus menebak dari mana ia dimulai:
Secara teknis dan fungsional keduanya sama.
sumber
endif;
yang akan sulit untuk menemukan awal untuk, karena mereka tidak akan memiliki fungsi yang sama untuk itu, dan kode VB-gaya tidak sarang dengan baik.Itu semua tergantung, secara pribadi saya lebih suka sintaksis tradisional dengan gema dan banyak lekukan, karena itu jauh lebih mudah dibaca.
Saya setuju bahwa sintaks alt lebih bersih dengan klausa akhir yang berbeda, tapi saya benar-benar kesulitan berurusan dengan mereka tanpa bantuan dari penyorotan editor teks, dan saya tidak terbiasa melihat kode "kental" seperti ini:
sumber
Saya dulu menggunakan kurung kurawal tetapi sekarang beberapa hari saya lebih suka menggunakan sintaks alternatif tangan pendek ini karena keterbacaan kode dan aksesibilitas.
sumber
Secara pribadi saya lebih suka membuatnya dalam dua bagian yang terpisah tetapi dalam PHP yang sama seperti:
Tapi mungkin lebih lambat?
sumber
Saya pikir ini masalah preferensi. Saya pribadi menggunakan:
sumber
Saya dulu menggunakan kurung keriting untuk kondisi "jika ada". Namun, saya menemukan "if (xxx): endif;" lebih semantik jika kodenya terbungkus tebal dan lebih mudah dibaca di editor mana pun.
Tentu saja, banyak editor yang mampu mengenali dan menyorot potongan kode ketika kurung keriting dipilih. Beberapa juga melakukannya dengan baik pada pasangan "if (xxx): endif" (mis., NetBeans)
Secara pribadi, saya akan merekomendasikan "if (xxx): endif", tetapi untuk pemeriksaan kondisi kecil (misalnya, hanya satu baris kode), tidak ada banyak perbedaan.
sumber
Saya merasa bahwa tidak ada jawaban yang sudah ada sepenuhnya mengidentifikasi jawaban di sini, jadi saya akan mengartikulasikan perspektif saya sendiri. Secara fungsional, kedua metode itu sama. Jika pemrogram terbiasa dengan bahasa lain mengikuti sintaks C, maka mereka kemungkinan akan merasa lebih nyaman dengan kawat gigi, atau jika php adalah bahasa pertama yang mereka pelajari, mereka akan merasa lebih nyaman dengan
if
endif
sintaksis, karena sepertinya lebih dekat ke bahasa reguler.Jika Anda seorang programmer yang benar-benar serius dan perlu menyelesaikan sesuatu dengan cepat, maka saya percaya bahwa sintaks kurung kurawal lebih unggul karena menghemat waktu mengetik
dibandingkan dengan
Ini khususnya benar dengan loop lain, katakanlah, di
foreach
mana Anda akhirnya mengetik 10 karakter tambahan. Dengan kawat gigi, Anda hanya perlu mengetikkan dua karakter, tetapi untuk sintaksis berbasis kata kunci Anda harus mengetikkan seluruh kata kunci tambahan untuk setiap loop dan pernyataan kondisional.sumber