Catatan: Saya minta maaf jika ini adalah pertanyaan yang sangat sederhana tapi saya agak obsesif kompulsif atas pemformatan kode saya.
Saya memiliki kelas yang memiliki fungsi yang mengembalikan string yang akan membentuk teks isi email. Saya ingin teks ini diformat sehingga terlihat benar di email, tetapi juga agar tidak membuat kode saya terlihat funky. Inilah yang saya maksud:
class Something
{
public function getEmailText($vars)
{
$text = 'Hello ' . $vars->name . ",
The second line starts two lines below.
I also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
}
tetapi bisa juga ditulis sebagai:
public function getEmailText($vars)
{
$text = "Hello {$vars->name},\n\rThe second line starts two lines below.\n\rI also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
tapi apa masalahnya dengan jalur baru dan pengembalian carriage? Apa bedanya? Apakah \n\n
setara dengan \r\r
atau \n\r
? Mana yang harus saya gunakan ketika saya membuat celah garis di antara garis?
Lalu ada opsi output buffering dan sintaks heredoc.
Bagaimana Anda berurusan dengan menggunakan string multiline panjang di objek Anda?
Jawaban:
Anda harus menggunakan HEREDOC atau NOWDOC.
Perbedaan antara Heredoc dan Nowdoc adalah kode PHP yang tertanam dalam heredoc dieksekusi, sedangkan kode PHP di Nowdoc akan dicetak apa adanya.
Dalam hal ini $ text akan memiliki nilai
My $var
.Catatan: sebelum penutupan
EOT;
tidak boleh ada spasi atau tab. jika tidak, Anda akan mendapatkan kesalahansumber
EOT;
tanpa spasi sebelum itu.EOT;
seharusnya tidak ada spasi atau tab. jika tidak, Anda akan mendapatkan kesalahan.Saya menggunakan sistem yang mirip dengan pix0r dan saya pikir itu membuat kode ini cukup mudah dibaca. Kadang-kadang saya benar-benar pergi sejauh memisahkan jeda baris dalam tanda kutip ganda dan menggunakan tanda kutip tunggal untuk sisa string. Dengan cara itu mereka menonjol dari sisa teks dan variabel juga menonjol lebih baik jika Anda menggunakan penggabungan daripada menyuntikkan mereka ke dalam string yang dikutip ganda. Jadi saya mungkin melakukan sesuatu seperti ini dengan contoh asli Anda:
Mengenai jeda baris, dengan email Anda harus selalu menggunakan \ r \ n. PHP_EOL adalah untuk file yang dimaksudkan untuk digunakan dalam sistem operasi yang sama dengan yang digunakan php.
sumber
Saya menggunakan templat untuk teks panjang:
email-template.txt berisi
Dalam PHP saya melakukan ini:
sumber
Menambahkan
\n
dan / atau\r
di tengah-tengah string, dan memiliki garis kode yang sangat panjang, seperti pada contoh kedua, tidak terasa benar: ketika Anda membaca kode, Anda tidak melihat hasilnya, dan Anda harus menggulir .Dalam situasi seperti ini, saya selalu menggunakan Heredoc (Atau Nowdoc, jika menggunakan PHP> = 5.3) : mudah ditulis, mudah dibaca, tidak perlu baris super panjang, ...
Misalnya :
Hanya satu hal: penanda akhir (dan tanda '
;
' setelahnya) harus menjadi satu-satunya hal di barisnya: tidak ada spasi / tab sebelum atau sesudah!sumber
Tentu, Anda bisa menggunakan HEREDOC, tetapi sejauh pembacaan kode tidak benar-benar lebih baik daripada contoh pertama, membungkus string melintasi beberapa baris.
Jika Anda benar-benar ingin string multi-line Anda terlihat bagus dan mengalir dengan baik dengan kode Anda, saya sarankan merangkai string bersama sebagai berikut:
Ini mungkin sedikit lebih lambat daripada HEREDOC atau string multi-line, tetapi itu akan mengalir dengan baik dengan lekukan kode Anda dan membuatnya lebih mudah dibaca.
sumber
Saya suka metode ini sedikit lebih untuk Javascript tetapi tampaknya layak termasuk di sini karena belum disebutkan.
Untuk hal-hal yang lebih kecil, saya merasa sering lebih mudah untuk bekerja dengan struktur array dibandingkan dengan string yang digabungkan.
Terkait: kinerja implode vs concat
sumber
Orang yang percaya itu
adalah string multiline salah. Itu dua string dengan operator concatenation, bukan string multiline. String bersambung seperti itu tidak dapat digunakan sebagai kunci dari array yang telah ditentukan, misalnya. Sayangnya php tidak menawarkan string multiline nyata dalam bentuk
hanya
HEREDOC
danNOWDOC
sintaksis, yang lebih cocok untuk templat, karena indentasi kode bersarang rusak oleh sintaksis seperti itu.sumber
Anda juga bisa menggunakan:
sumber
Sehubungan dengan pertanyaan Anda tentang baris baru dan pengembalian carriage:
Saya akan merekomendasikan menggunakan konstanta global PHP_EOL yang telah ditentukan karena akan menyelesaikan masalah kompatibilitas lintas platform.
Pertanyaan ini telah diajukan pada SO sebelumnya dan Anda dapat menemukan informasi lebih lanjut dengan membaca " Kapan saya menggunakan konstanta PHP PHP_EOL "
sumber
Tampaknya tidak ada seorang pun di sini yang menjawab pertanyaan ini, jadi inilah saya.
\r
mewakili 'carriage-return'\n
mewakili 'umpan baris'Alasan sebenarnya mereka kembali ke mesin tik. Saat Anda mengetik 'carriage' perlahan-lahan akan meluncur, karakter demi karakter, di sebelah kanan mesin tik. Ketika Anda sampai di ujung garis Anda akan mengembalikan kereta dan kemudian pergi ke jalur baru . Untuk menuju ke baris baru, Anda akan membalik tuas yang diumpankan ke penulis tipe. Dengan demikian tindakan-tindakan ini, digabungkan, disebut pengumpanan carriage return line . Secara harfiah:
Umpan baris
\n
,, berarti pindah ke baris berikutnya.Carriage return,,
\r
berarti memindahkan kursor ke awal baris.Pada akhirnya
Hello\n\nWorld
harus menghasilkan output berikut di layar:Dimana sebagai
Hello\r\rWorld
harus menghasilkan output berikut .Hanya ketika menggabungkan 2 karakter
\r\n
yang Anda memiliki pemahaman umum tentang garis tahu. YAITUHello\r\nWorld
harus menghasilkan:Dan tentu saja
\n\r
akan menghasilkan keluaran visual yang sama dengan\r\n
.Awalnya komputer mengambil
\r
dan\n
secara harfiah. Namun belakangan ini dukungan untuk carriage return jarang. Biasanya pada setiap sistem Anda dapat menggunakan\n
dengan sendirinya. Itu tidak pernah tergantung pada OS, tetapi itu tergantung pada apa yang Anda lihat output masukTetap saya selalu menyarankan menggunakan
\r\n
dimanapun Anda bisa!sumber