Mengapa memiliki <? Php dan?> Di setiap baris


24

Saya telah melihat konvensi ini cukup banyak di mana-mana, dan, kadang-kadang, hampir membuat saya gila:

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>

Di mana <?phpdan penutup ?>berada di setiap baris, meskipun tidak ada kode HTML yang campur tangan.

Pertanyaan saya adalah: Mengapa? Mengapa menyertakan semua tag tambahan ini?

Bagi saya, tampaknya konvensi ini menambahkan sejumlah besar kekacauan pada kode, mengganggu untuk diikuti di tempat pertama, dan menambahkan bahwa lebih banyak tempat untuk secara tidak sengaja meninggalkan tag pembuka atau penutup.

CATATAN

Ini adalah kode yang diambil dari tema Dua Puluh Dua Belas, contoh yang diberikan oleh WordPress.


juga, singkatan sementara pernyataan = o
Tom J Nowell

3
Menandai untuk ditutup - tidak ada jawaban pasti untuk pertanyaan ini, dan tentu saja ini bukan masalah khusus WP - siapa pun yang bekerja dengan PHP akan menghadapi masalah ini
anu

3
@ anu: Pertama, sebuah pertanyaan mungkin tidak selalu memiliki satu, jawaban pasti (meskipun masih memiliki jawaban terbaik). Pedoman mengatakan "praktis, dan jawab". Kedua, ya, ini secara teknis masalah PHP, tapi saya sudah melihat ini, lebih dalam waktu singkat saya bekerja dengan WP. Jadi, sementara ini tidak terbatas pada WP, menurut saya cukup berkorelasi untuk bertanya dalam pengaturan WP.
Indigenuity

Jawaban:


20

Ini tidak direkomendasikan dalam panduan gaya WordPress apa pun, dan saya pikir ini adalah gaya pengkodean yang buruk. Pemula menggunakan gaya ini, mungkin karena rasanya lebih seperti HTML ...

Sayangnya, tema default terlalu sering menggunakan gaya ini, sehingga beberapa pemula mungkin berpikir itu adalah bagian dari gaya kode.

Salah satu kelemahan gaya ini adalah penanganan komentar. Perhatikan baik-baik contoh berikut dan bagaimana itu tidak melakukan apa yang penulis harapkan:

<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>

Semoga berhasil men-debug itu. :)

Aturan: Beralih antara konteks PHP dan HTML hanya jika Anda harus membuat output dari kedua bahasa. Gunakan jeda baris reguler dalam semua kasus lainnya.

Perbarui, pemikiran lebih lanjut: Setiap file HTML yang valid adalah program PHP yang lengkap dan valid. Ya, bahkan jika itu tidak mengandung satu baris kode PHP yang sebenarnya.

Jika Anda mulai dari HTML dan menambahkan potongan-potongan kecil PHP langkah demi langkah ... Anda mungkin berakhir dengan gaya yang kita bahas di sini. Di situlah refactoring masuk ke dalam permainan: Setelah semuanya berjalan seperti yang diharapkan, tulis ulang kode hingga terbaca mungkin, mudah untuk mempertahankan dan memperluas, tanpa mengulangi bagian-bagian.

Saya kira beberapa orang bahagia tanpa langkah terakhir ini, dan itu sebabnya ini tidak akan mati segera.


Sayang sekali bahwa sintaks yang disorot di atas tidak menunjukkan apa yang sebenarnya terjadi dengan komentar itu ...
webaware

9
@ Webware Saya pikir itu menggambarkan masalah bahkan lebih. :)
fuxia

Benar :) (ditambah beberapa karakter untuk menjaga komentar SE polisi senang)
webaware

2
@AndyAdams Cukup adil, saya telah mengulanginya. Dan sekarang pergilah, Anda penasehat jahat. :)
fuxia

3
Tema menggunakan gaya ini karena melakukan sebaliknya terlalu jelek. Ketika refactoring tema, saya lebih suka menulis ulang kode agar dapat dibaca sebagai mungkin, dan itu berarti tidak memiliki echo / printf / var_dump di sekitar dan untuk menempatkan setiap struktur kontrol di dalam pasangan mereka sendiri <? ... ?>untuk membuat bersarang lebih mudah untuk dipahami. Satu hal yang saya lakukan berbeda dari contoh OP, adalah bahwa saya menggunakan the_post();jalurnya sendiri.
Lie Ryan

12

Sementara saya menghindari ini untuk komentar PHP, saya adalah pembuka PHP / keranjingan dalam file template. Alternatifnya melibatkan pengulangan HTML melalui string PHP, yang menurut saya terlihat lebih buruk. Sebagai contoh primitif:

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href='" . $list_item->url . "'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

Apakah contoh 2 lebih bertele-tele? Mungkin? Tetapi lebih mudah untuk membaca dan mengedit, menurut saya. Anda bisa membayangkan betapa jeleknya itu untuk HTML yang kompleks.

Juga, hanya sebagai catatan: menggunakan endforeachdan endifsaat menulis HTML antara logika PHP Anda meningkatkan keterbacaan satu ton dibandingkan dengan }.


5
keuntungan besar }atas endifbagaimanapun adalah bahwa (di banyak editor) Anda dapat dengan mudah melihat di mana pembukaan {adalah dan karena itu apakah semuanya telah ditutup dengan benar. Coba cari tahu dengan endifdan sejumlah persyaratan ...

2
foreach ( $list_items as $list_item ) printf( '<li><a href="%1$s">%2$s</a></li>', $list_item->url, $list_item->name );- dua baris, HTML dan PHP dipisahkan dengan baik. : P
fuxia

4
@toscho: Anda benar-benar melewatkan intinya. Anda masih mencampur PHP dan HTML, orang-orang yang lebih suka gaya kedua melakukannya karena kami ingin menghindari memiliki HTML di dalam string PHP. Saya menggunakan gaya kedua ketika menggunakan PHP sebagai bahasa templating karena itu adalah satu-satunya cara untuk membuat campuran antara PHP dan HTML secara masuk akal, sedangkan saya menggunakan gaya lama ketika menggunakan PHP sebagai bahasa scripting karena biasanya tidak ada alasan yang baik untuk memiliki HTML dalam skrip ketika Anda memisahkan logika aplikasi dari template. Gaya kedua akan lebih baik jika tag pendek tersedia: <? ... ?>dan <?= ... ?>.
Lie Ryan

1
@ Parsi: jika Anda memiliki masalah pencocokan kawat gigi, Anda mungkin tidak pernah mendengar lekukan? Selain itu, Anda harus dapat mengonfigurasi untuk menyorot pembukaan endifeditor apa pun yang layak.
Lie Ryan


10

Ini tentang pilihan antara melihat halaman sebagai:

  • sebagai entitas yang sepenuhnya dihasilkan PHP
  • sebagai templat dokumen HTML, diberdayakan oleh tag templat PHP

Orang yang berbeda cenderung memikirkannya secara berbeda. Perhatikan bahwa fungsi jarang menggunakan gaya ini, karena mereka merasa lebih seperti blok PHP murni. Di sisi lain itu tidak biasa di templat karena mereka lebih tersebar di file dan jumlah HTML murni dapat dengan mudah lebih dari PHP di dalamnya.

Jika Anda melihat mesin templating (Kumis, Ranting, dll) - mereka terlihat sangat mirip dengan gaya ini kecuali bahwa sintaks mereka cenderung menghilangkan verbositas dari PHP biasa.

PS Saya ingin catatan yang saya bicarakan waras embedding PHP di HTML, tidak secara harfiah membuka dan berakhir tag pada setiap baris hanya untuk kepentingan itu.


2

Pertanyaan saya adalah: Mengapa? Mengapa menyertakan semua tag tambahan ini?

Jawabannya cukup sederhana: Hadirin. Ketika orang (bukan pemrogram) mengambil tema, kemudian FTP menginstal mereka, menjalankan pengaturan 5 menit dan sebagainya sudah terasa seperti pemrograman untuk mereka. Ketika mereka ingin menambahkan atau mengubah satu baris dari apa pun di tema mereka, maka mereka mungkin sudah tahu apa itu HTML. PHP masih akan jauh dari jangkauan mereka. Jadi tebakan saya adalah bahwa ide di balik ini adalah untuk memungkinkan penambahan atau penghapusan elemen yang lebih mudah tanpa merusak apa pun ketika mereka melakukan kesalahan.

Catatan: Ini bukan yang saya sukai, sukai atau rekomendasikan. Hanya itulah yang saya pikirkan mengapa ini terjadi.


0

Saya telah menemukan bahwa beberapa programmer baru dilatih dengan cara ini. Saya mengikuti kursus 40 jam di Lynda dan instruktur menjatuhkan tag PHP di setiap baris, dengan pengecualian definisi fungsi. Mungkin untuk dengan jelas menggambar garis antara HTML dan PHP, yang mungkin membantu orang baru memahami di mana HTML berakhir dan PHP dimulai. Setelah itu, mungkin itu kebiasaan. Saya sendiri mulai kesal dengan hal itu dan memutuskan untuk melihat apakah ada orang lain yang mengeluh.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.