Untuk menutup atau tidak menutup php

14

Saya telah membaca bahwa disarankan (terutama dengan php 7) untuk tidak menutup file php dengan ?>

Banyak file WP php saya berakhir seperti ini:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Haruskah saya menghapus tag penutup dan memiliki sesuatu seperti ini

<?php get_sidebar(); ?>
<?php get_footer(); 

di akhir file saya?

IXN
sumber
2
Jika tidak ada apa-apa setelah tag php tidak tertutup Anda itu benar-benar ok, seperti yang saya amati dalam banyak kerangka kerja seperti Laravel, mereka tidak menutup tag php di akhir file, dan omong-omong, file inti WordPress juga mengikuti yang sama pola dan tidak menutup tag php di akhir, jadi saya pikir kita harus mengikuti gaya pengkodean WordPress dan tidak menutupnya.
Amirmasoud
1
Kemungkinan tiket terkait di trac: # 10633
Sven

Jawaban:

19

Ya, harap hindari menutup tag PHP di akhir file, tidak hanya dengan PHP 7, tetapi juga dengan PHP 5.

Alasannya adalah bahwa jika Anda menutup tag, apa pun yang setelah tag, bahkan baris kosong, akan dikirim ke output dan akan membuat PHP untuk mengirim header serta mencegah cookie diatur, mengarahkan kembali ke pekerjaan, memberi makan menjadi valid, dan seterusnya.

Saya kira Anda pernah menemukan pesan seperti

Tidak dapat mengubah informasi header - header sudah dikirim oleh (output dimulai pada ...) di ... online ...

Penutupan ?>di akhir file bisa menjadi penyebabnya.

gmazzap
sumber
1
Saya percaya ini adalah jawaban yang benar. Bahkan Underscores , tempat asal saya mendapatkan templat, telah menghapus tag penutup pada pembaruan terbaru.
IXN
@IXN Ini benar jika seluruh file adalah PHP dan karena itu terdiri dari satu blok kode PHP (blok kode PHP ditutup secara implisit di akhir file). Namun, jika Anda memiliki beberapa blok kode PHP dan sedang mencampur HTML dan PHP, seperti tersirat pada contoh dalam pertanyaan Anda, maka Anda harus secara eksplisit menutup blok kode PHP, seperti yang dinyatakan oleh TheDeadMedic dalam jawabannya.
MrWhite
Saya pikir satu-satunya pengecualian adalah jika blok kode php terakhir diikuti oleh html. Tetapi jika simbol terakhir pada file adalah?> Mereka dapat / harus dihilangkan. Atau begitulah yang saya mengerti.
IXN
Alasan utama untuk menghilangkan (atau termasuk) tag PHP penutup adalah untuk menghindari memperkenalkan bug konyol selama pengembangan. Seperti disebutkan di atas, untuk file yang sepenuhnya PHP, ini dapat menghindari output yang tidak disengaja yang mengakibatkan kesalahan. Untuk file yang sudah mencampur output HTML dan PHP ini tidak dapat menyebabkan kesalahan. Namun, penghapusan tag PHP penutup dalam kasus kedua ini berpotensi menimbulkan bug, karena Anda sekarang harus ingat untuk secara eksplisit menutup tag PHP sebelum menambahkan konten HTML tambahan - ini bukan sesuatu yang Anda lakukan dalam file kode PHP seluruhnya.
MrWhite
Jika Anda melihat melalui sumber WP, Anda akan melihat bahwa (sebagian besar) PHP termasuk menghilangkan tag PHP yang tertinggal. Namun, file template (yang mencampur blok kode HTML dan PHP) selalu menyertakan tag PHP penutup.
MrWhite
11

Diberikan contoh spesifik Anda, saya akan menyimpan tag penutup yaitu panggilan fungsi satu baris dalam sebuah template. Ini konsisten dan membantu kejelasan (dengan cara yang sama merekomendasikan WordPress trailing koma untuk array ) - jika tidak bayangkan jika non-pengembang mengambil file Anda dan mulai menambahkannya:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

Namun, untuk semua file lain (fungsi, termasuk dll.), Sarannya jelas merupakan ide yang bagus:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Saya menemukan ini lebih bersih, dan seperti yang lain telah disebutkan, tidak ada risiko "header sudah ditakuti".

TheDeadMedic
sumber