Ada banyak informasi usang di Web yang menyesatkan pengguna PHP baru, menyebarkan praktik buruk dan kode tidak aman. PHP. The Right Way adalah referensi cepat dan mudah dibaca untuk standar pengkodean populer PHP, tautan ke tutorial otoritatif di Web, dan apa yang kontributor anggap sebagai praktik terbaik saat ini Show
Tidak ada cara kanonik untuk menggunakan PHP. Situs web ini bertujuan untuk memperkenalkan pengembang PHP baru ke beberapa topik yang mungkin tidak mereka temukan sampai terlambat, dan bertujuan untuk memberikan beberapa ide segar kepada para profesional berpengalaman tentang topik yang telah mereka lakukan selama bertahun-tahun tanpa pernah mempertimbangkan kembali. Situs web ini juga tidak akan memberi tahu Anda alat mana yang harus digunakan, melainkan menawarkan saran untuk beberapa opsi, jika memungkinkan menjelaskan perbedaan dalam pendekatan dan kasus penggunaan Ini adalah dokumen hidup dan akan terus diperbarui dengan informasi dan contoh yang lebih bermanfaat saat tersedia TerjemahanPHP. Jalan yang Benar diterjemahkan ke dalam berbagai bahasa BukuPHP versi terbaru. Cara yang Benar juga tersedia dalam format PDF, EPUB, dan MOBI. Pergi ke Leanpub Bagaimana BerkontribusiBantu jadikan situs web ini sumber daya terbaik untuk pemrogram PHP baru. Berkontribusi di GitHub Gunakan Versi Stabil Saat Ini (8. 2)Jika Anda memulai dengan PHP, mulailah dengan rilis stabil PHP 8 saat ini. 2. PHP 8. x menambahkan banyak di atas 7 yang lebih tua. x dan 5. versi x. Mesinnya sebagian besar telah ditulis ulang, dan PHP sekarang bahkan lebih cepat daripada versi sebelumnya. PHP 8 adalah pembaruan utama bahasa dan berisi banyak fitur dan pengoptimalan baru Anda harus mencoba memutakhirkan ke versi stabil terbaru dengan cepat - PHP 7. 4 sudah Akhir Kehidupan. Memutakhirkan itu mudah, karena tidak banyak kerusakan kompatibilitas mundur PHP 8. 0, PHP8. 1, PHP8. 2. Jika Anda tidak yakin versi mana dari suatu fungsi atau fitur, Anda dapat memeriksa dokumentasi PHP di php. situs bersih Server web bawaanDengan PHP5. 4 atau lebih baru, Anda dapat mulai mempelajari PHP tanpa menginstal dan mengonfigurasi server web lengkap. Untuk memulai server, jalankan perintah berikut dari terminal Anda di root web proyek Anda
Pengaturan MacmacOS sudah dikemas dengan PHP tetapi biasanya sedikit di belakang rilis stabil terbaru. Ada beberapa cara untuk menginstal versi PHP terbaru di macOS Instal PHP melalui HomebrewHomebrew adalah pengelola paket untuk macOS yang membantu Anda menginstal PHP dan berbagai ekstensi dengan mudah. Repositori inti Homebrew menyediakan "formula" untuk PHP 7. 4, 8. 0, 8. 1 dan PHP8. 2. Instal versi terbaru dengan perintah ini Anda dapat beralih di antara versi PHP Homebrew dengan memodifikasi variabel 3 Anda. Sebagai alternatif, Anda dapat menggunakan brew-php-switcher untuk mengganti versi PHP secara otomatisAnda juga dapat beralih antar versi PHP secara manual dengan membatalkan tautan dan menautkan versi yang diinginkan
Instal PHP melalui MacportsProyek MacPorts adalah inisiatif komunitas sumber terbuka untuk merancang sistem yang mudah digunakan untuk mengkompilasi, menginstal, dan memutakhirkan perangkat lunak sumber terbuka berbasis baris perintah, X11 atau Aqua pada sistem operasi OS X MacPorts mendukung binari yang telah dikompilasi sebelumnya, jadi Anda tidak perlu mengkompilasi ulang setiap dependensi dari file tarball sumber, ini menyelamatkan hidup Anda jika Anda tidak memiliki paket apa pun yang terinstal di sistem Anda Pada titik ini, Anda dapat menginstal 4, 5, 6, 7, 8, 9, , 1, 2, ________ ________10____1111111
Dan Anda dapat menjalankan perintah _6 untuk mengganti PHP aktif Anda
Instal PHP melalui phpbrewphpbrew adalah alat untuk menginstal dan mengelola beberapa versi PHP. Ini bisa sangat berguna jika dua aplikasi/proyek yang berbeda memerlukan versi PHP yang berbeda, dan Anda tidak menggunakan mesin virtual Instal PHP melalui penginstal biner LiipOpsi populer lainnya adalah php-osx. liip. ch yang menyediakan metode instalasi satu liner untuk versi 5. 3 sampai 7. 3. Itu tidak menimpa binari PHP yang diinstal oleh Apple, tetapi menginstal semuanya di lokasi terpisah (/usr/local/php5) Kompilasi dari SumberOpsi lain yang memberi Anda kendali atas versi PHP yang Anda instal, adalah mengkompilasinya sendiri. Dalam hal ini, pastikan untuk menginstal Xcode atau "Alat Baris Perintah untuk XCode" pengganti Apple yang dapat diunduh dari Pusat Pengembang Mac Apple Pemasang All-in-OneSolusi yang tercantum di atas terutama menangani PHP itu sendiri, dan tidak menyediakan hal-hal seperti Apache, Nginx, atau server SQL. Solusi "All-in-one" seperti MAMP dan XAMPP akan menginstal perangkat lunak lain ini untuk Anda dan menyatukan semuanya, tetapi kemudahan penyiapan disertai dengan trade-off fleksibilitas Pengaturan WindowsAnda dapat mengunduh binari dari windows. php. bersih/unduh. Setelah ekstraksi PHP, disarankan untuk mengatur PATH ke root folder PHP Anda (di mana php. exe terletak) sehingga Anda dapat menjalankan PHP dari mana saja Untuk pembelajaran dan pengembangan lokal, Anda dapat menggunakan webserver bawaan dengan PHP 5. 4+ sehingga Anda tidak perlu khawatir untuk mengonfigurasinya. Jika Anda menginginkan "all-in-one" yang menyertakan server web lengkap dan MySQL juga, maka alat seperti XAMPP, EasyPHP, OpenServer, dan WAMP akan membantu membuat lingkungan pengembangan Windows aktif dan berjalan cepat. Meskipun demikian, alat ini akan sedikit berbeda dari produksi, jadi berhati-hatilah dengan perbedaan lingkungan jika Anda bekerja di Windows dan menerapkannya ke Linux Jika Anda perlu menjalankan sistem produksi Anda di Windows, maka IIS7 akan memberi Anda kinerja paling stabil dan terbaik. Anda dapat menggunakan phpmanager (plugin GUI untuk IIS7) untuk membuat konfigurasi dan pengelolaan PHP sederhana. IIS7 hadir dengan FastCGI bawaan dan siap digunakan, Anda hanya perlu mengonfigurasi PHP sebagai penangan. Untuk dukungan dan sumber daya tambahan ada area khusus di iis. bersih untuk PHP Generally running your application on different environment in development and production can lead to strange bugs popping up when you go live. If you are developing on Windows and deploying to Linux (or anything non-Windows) then you should consider using a Chris Tankersley has a very helpful blog post on what tools he uses to do PHP development using Windows Common Directory structureA common question among those starting out with writing programs for the web is, “where do I put my stuff?” Over the years, this answer has consistently been “where the 7 is. ” Although this answer is not complete, it’s a great place to startFor security reasons, configuration files should not be accessible by a site’s visitors; therefore, public scripts are kept in a public directory and private configurations and data are kept outside of that directory For each team, CMS, or framework one works in, a standard directory structure is used by each of those entities. However, if one is starting a project alone, knowing which filesystem structure to use can be daunting Paul M. Jones has done some fantastic research into common practices of tens of thousands of github projects in the realm of PHP. He has compiled a standard file and directory structure, the Standard PHP Package Skeleton, based on this research. In this directory structure, 7 should point to 9, unit tests should be in the 0 directory, and third party libraries, as installed by , belong in the 1 directory. For other files and directories, abiding by the Standard PHP Package Skeleton will make the most sense to contributors of a projectThe PHP community is large and diverse, composed of innumerable libraries, frameworks, and components. It is common for PHP developers to choose several of these and combine them into a single project. It is important that PHP code adheres (as close as possible) to a common code style to make it easy for developers to mix and match various libraries for their projects The Framework Interop Group has proposed and approved a series of style recommendations. Not all of them relate to code-style, but those that do are PSR-1, PSR-12 and PSR-4. These recommendations are merely a set of rules that many projects like Drupal, Zend, Symfony, Laravel, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium, etc. are adopting. You can use them for your own projects, or continue to use your own personal style Ideally, you should write PHP code that adheres to a known standard. This could be any combination of PSRs, or one of the coding standards made by PEAR or Zend. This means other developers can easily read and work with your code, and applications that implement the components can have consistency even when working with lots of third-party code You can use PHP_CodeSniffer to check code against any one of these recommendations, and plugins for text editors like Sublime Text to be given real-time feedback You can fix the code layout automatically by using one of the following tools And you can run phpcs manually from shell
It will show errors and describe how to fix them. It can also be helpful to include this command in a git hook. That way, branches which contain violations against the chosen standard cannot enter the repository until those violations have been fixed If you have PHP_CodeSniffer, then you can fix the code layout problems reported by it, automatically, with the PHP Code Beautifier and Fixer
Another option is to use the PHP Coding Standards Fixer. It will show what kind of errors the code structure had before it fixed them
English is preferred for all symbol names and code infrastructure. Comments may be written in any language easily readable by all current and future parties who may be working on the codebase Finally, a good supplementary resource for writing clean PHP code is Clean Code PHP Programming ParadigmsPHP is a flexible, dynamic language that supports a variety of programming techniques. It has evolved dramatically over the years, notably adding a solid object-oriented model in PHP 5. 0 (2004), anonymous functions and namespaces in PHP 5. 3 (2009), and traits in PHP 5. 4 (2012) Object-oriented ProgrammingPHP memiliki sekumpulan fitur pemrograman berorientasi objek yang sangat lengkap termasuk dukungan untuk kelas, kelas abstrak, antarmuka, pewarisan, konstruktor, kloning, pengecualian, dan lainnya Pemrograman FungsionalPHP mendukung fungsi kelas satu, yang berarti bahwa suatu fungsi dapat ditugaskan ke variabel. Fungsi yang ditentukan pengguna dan bawaan dapat direferensikan oleh variabel dan dipanggil secara dinamis. Fungsi dapat diteruskan sebagai argumen ke fungsi lain (fitur yang disebut Fungsi Tingkat Tinggi) dan fungsi dapat mengembalikan fungsi lain Rekursi, fitur yang memungkinkan suatu fungsi memanggil dirinya sendiri, didukung oleh bahasa, tetapi sebagian besar kode PHP difokuskan pada iterasi Fungsi anonim baru (dengan dukungan untuk penutupan) hadir sejak PHP 5. 3 (2009) PHP5. 4 menambahkan kemampuan untuk mengikat penutupan ke ruang lingkup objek dan juga meningkatkan dukungan untuk callable sehingga dapat digunakan secara bergantian dengan fungsi anonim di hampir semua kasus PHP mendukung berbagai bentuk pemrograman meta melalui mekanisme seperti API Refleksi dan Metode Ajaib. Ada banyak Metode Ajaib yang tersedia seperti _2, 3, 4, 5, 6, dll. yang memungkinkan pengembang untuk terhubung ke perilaku kelas. Pengembang Ruby sering mengatakan bahwa PHP kurang 7, tetapi tersedia sebagai 8 dan 9Ruang namaSeperti disebutkan di atas, komunitas PHP memiliki banyak pengembang yang membuat banyak kode. Ini berarti bahwa kode PHP satu perpustakaan mungkin menggunakan nama kelas yang sama dengan yang lain. Saat kedua pustaka digunakan dalam namespace yang sama, keduanya bertabrakan dan menimbulkan masalah Ruang nama memecahkan masalah ini. Seperti yang dijelaskan dalam manual referensi PHP, ruang nama dapat dibandingkan dengan direktori sistem operasi yang file ruang nama; . Demikian pula, dua kelas PHP dengan nama yang sama dapat hidup berdampingan di ruang nama PHP yang terpisah. Sesederhana itu Penting bagi Anda untuk memberi nama kode Anda sehingga dapat digunakan oleh pengembang lain tanpa takut bertabrakan dengan perpustakaan lain Salah satu cara yang disarankan untuk menggunakan ruang nama diuraikan dalam PSR-4, yang bertujuan untuk menyediakan konvensi file, kelas, dan ruang nama standar untuk memungkinkan kode plug-and-play Pada Oktober 2014, PHP-FIG menghentikan standar pemuatan otomatis sebelumnya. PSR-0. Baik PSR-0 dan PSR-4 masih dapat digunakan dengan sempurna. Yang terakhir membutuhkan PHP 5. 3, begitu banyak PHP5. Proyek 2-saja menerapkan PSR-0 Jika Anda akan menggunakan standar autoloader untuk aplikasi atau paket baru, lihat PSR-4 Perpustakaan PHP StandarStandard PHP Library (SPL) dikemas dengan PHP dan menyediakan kumpulan kelas dan antarmuka. Itu terdiri terutama dari kelas struktur data yang umum dibutuhkan (tumpukan, antrian, tumpukan, dan sebagainya), dan iterator yang dapat melintasi struktur data ini atau kelas Anda sendiri yang mengimplementasikan antarmuka SPL Antarmuka Baris PerintahPHP dibuat untuk menulis aplikasi web, tetapi juga berguna untuk scripting program antarmuka baris perintah (CLI). Program PHP baris perintah dapat membantu mengotomatiskan tugas-tugas umum seperti pengujian, penerapan, dan administrasi aplikasi Program CLI PHP sangat kuat karena Anda dapat menggunakan kode aplikasi Anda secara langsung tanpa harus membuat dan mengamankan GUI web untuk itu. Pastikan untuk tidak meletakkan skrip CLI PHP Anda di root web publik Anda Coba jalankan PHP dari baris perintah Anda
Opsi _0 akan mencetak konfigurasi PHP Anda seperti fungsi 1Opsi _2 menyediakan shell interaktif, mirip dengan IRB Ruby atau shell interaktif python. Ada sejumlah opsi baris perintah berguna lainnya jugaMari kita menulis program CLI “Hello, $name” sederhana. Untuk mencobanya, buat file bernama ________36______3, seperti di bawah ini
PHP menyiapkan dua variabel khusus berdasarkan argumen yang digunakan skrip Anda. 4 adalah variabel integer yang berisi jumlah argumen dan 5 adalah variabel array yang berisi nilai setiap argumen. Argumen pertama selalu berupa nama file skrip PHP Anda, dalam hal ini 3Ekspresi _7 digunakan dengan angka bukan nol untuk memberi tahu shell bahwa perintah gagal. Kode keluar yang umum digunakan dapat ditemukan di siniUntuk menjalankan skrip kami, di atas, dari baris perintah 0XdebugSalah satu alat paling berguna dalam pengembangan perangkat lunak adalah debugger yang tepat. Ini memungkinkan Anda melacak eksekusi kode Anda dan memantau konten tumpukan. Xdebug, debugger PHP, dapat digunakan oleh berbagai IDE untuk menyediakan Breakpoints dan pemeriksaan tumpukan. Itu juga dapat memungkinkan alat seperti PHPUnit dan KCacheGrind untuk melakukan analisis cakupan kode dan pembuatan profil kode Jika Anda menemukan diri Anda terikat, bersedia menggunakan 8/ 9, dan Anda masih tidak dapat menemukan solusinya - mungkin Anda perlu menggunakan debuggerMenginstal Xdebug bisa rumit, tetapi salah satu fitur terpentingnya adalah "Remote Debugging" - jika Anda mengembangkan kode secara lokal dan kemudian mengujinya di dalam VM atau di server lain, Remote Debugging adalah fitur yang ingin Anda aktifkan segera Biasanya, Anda akan memodifikasi Apache VHost atau. htaccess dengan nilai-nilai ini 1"Host jarak jauh" dan "port jarak jauh" akan sesuai dengan komputer lokal Anda dan port tempat Anda mengonfigurasi IDE untuk didengarkan. Maka itu hanya masalah menempatkan IDE Anda ke mode "mendengarkan koneksi", dan memuat URL 2IDE Anda sekarang akan mencegat keadaan saat ini saat skrip dieksekusi, memungkinkan Anda untuk menyetel breakpoint dan menyelidiki nilai dalam memori Debugger grafis membuatnya sangat mudah untuk menelusuri kode, memeriksa variabel, dan mengevaluasi kode terhadap runtime langsung. Banyak IDE memiliki dukungan bawaan atau berbasis plugin untuk debugging grafis dengan Xdebug. MacGDBp adalah GUI Xdebug gratis, bersumber terbuka, berdiri sendiri untuk Mac Ada banyak pustaka, kerangka kerja, dan komponen PHP untuk dipilih. Proyek Anda kemungkinan akan menggunakan beberapa di antaranya — ini adalah dependensi proyek. Hingga saat ini, PHP tidak memiliki cara yang baik untuk mengelola dependensi proyek ini. Bahkan jika Anda mengelolanya secara manual, Anda tetap harus khawatir tentang pemuat otomatis. Itu bukan lagi masalah Saat ini ada dua sistem manajemen paket utama untuk PHP - dan. Komposer saat ini adalah pengelola paket paling populer untuk PHP, namun untuk waktu yang lama PEAR adalah pengelola paket utama yang digunakan. Mengetahui sejarah PEAR adalah ide yang bagus, karena Anda masih dapat menemukan referensi bahkan jika Anda tidak pernah menggunakannya Komposer dan PemaketKomposer adalah manajer ketergantungan yang direkomendasikan untuk PHP. Cantumkan dependensi proyek Anda dalam file 00 dan, dengan beberapa perintah sederhana, Composer akan secara otomatis mengunduh dependensi proyek Anda dan menyiapkan pemuatan otomatis untuk Anda. Komposer analog dengan NPM di node. js, atau Bundler di dunia RubyAda banyak library PHP yang kompatibel dengan Composer dan siap digunakan dalam proyek Anda. “Paket” ini terdaftar di Packagist, repositori resmi untuk pustaka PHP yang kompatibel dengan Komposer Cara Memasang KomposerCara teraman untuk mengunduh komposer adalah dengan mengikuti petunjuk resmi. Ini akan memverifikasi penginstal tidak rusak atau dirusak. Pemasang menginstal biner _01 di direktori kerja Anda saat iniKami merekomendasikan menginstal Composer secara global (mis. g. satu salinan di _02). Untuk melakukannya, jalankan perintah ini selanjutnya _3Catatan. Jika di atas gagal karena izin, awali dengan 03Untuk menjalankan Komposer yang diinstal secara lokal, Anda akan menggunakan 04, secara global cukup 05Menginstal di WindowsUntuk pengguna Windows, cara termudah untuk memulai dan menjalankannya adalah dengan menggunakan penginstal ComposerSetup, yang menjalankan penginstalan global dan menyiapkan 06 Anda sehingga Anda dapat memanggil 05 dari direktori mana pun di baris perintah AndaCara Mendefinisikan dan Menginstal KetergantunganKomposer melacak dependensi proyek Anda dalam file bernama 00. Anda dapat mengelolanya secara manual jika Anda mau, atau menggunakan Composer itu sendiri. Perintah _09 menambahkan ketergantungan proyek dan jika Anda tidak memiliki file 00, satu akan dibuat. Berikut adalah contoh yang menambahkan Twig sebagai ketergantungan proyek Anda _4Atau, perintah _11 akan memandu Anda melalui pembuatan file 00 lengkap untuk proyek Anda. Either way, setelah Anda membuat file 00 Anda, Anda dapat memberi tahu Composer untuk mengunduh dan menginstal dependensi Anda ke dalam direktori 1. Ini juga berlaku untuk proyek yang telah Anda unduh yang telah menyediakan file 00 5Selanjutnya, tambahkan baris ini ke file PHP utama aplikasi Anda; 6 16 yang menyimpan versi persis dari setiap paket yang diunduh saat Anda pertama kali menjalankan 17. Jika Anda berbagi proyek dengan orang lain, pastikan file _18 disertakan, sehingga ketika mereka menjalankan 17 mereka akan mendapatkan versi yang sama dengan Anda. Untuk memperbarui dependensi Anda, jalankan _20. Jangan gunakan 20 saat menerapkan, hanya 17, jika tidak, Anda mungkin akan mendapatkan versi paket yang berbeda pada produksiIni sangat berguna saat Anda menentukan persyaratan versi secara fleksibel. Misalnya, persyaratan versi _23 berarti "apa pun yang lebih baru dari 24, tetapi kurang dari 25". Anda juga dapat menggunakan wildcard _26 seperti pada 27. Sekarang perintah _20 Composer akan memutakhirkan semua dependensi Anda ke versi terbaru yang sesuai dengan batasan yang Anda tetapkanUntuk menerima pemberitahuan tentang rilis versi baru, Anda dapat mendaftar ke perpustakaan. io, layanan web yang dapat memantau dependensi dan mengirimi Anda peringatan tentang pembaruan Memeriksa dependensi Anda untuk masalah keamananPemeriksa Keamanan PHP Lokal adalah alat baris perintah, yang akan memeriksa file ________2______18 Anda dan memberi tahu Anda jika Anda perlu memperbarui salah satu dependensi Anda Menangani dependensi global dengan ComposerKomposer juga dapat menangani dependensi global dan binernya. Penggunaannya mudah, yang perlu Anda lakukan hanyalah mengawali perintah Anda dengan 30. Jika misalnya Anda ingin menginstal PHPUnit dan membuatnya tersedia secara global, Anda akan menjalankan perintah berikut 7Ini akan membuat folder _31 tempat dependensi global Anda berada. Agar binari paket terinstal tersedia di mana-mana, Anda kemudian akan menambahkan folder 32 ke variabel 06 Anda 34 installer dan menjalankannya. Dokumentasi PEAR memiliki petunjuk penginstalan terperinci untuk setiap sistem operasiJika Anda menggunakan Linux, Anda juga dapat melihat manajer paket distribusi Anda. Debian dan Ubuntu, misalnya, memiliki paket ________2______35 yang tepat Cara menginstal paketJika paket terdaftar di daftar paket PEAR, Anda dapat menginstalnya dengan menentukan nama resminya _8Jika paket dihosting di saluran lain, Anda harus 36 saluran terlebih dahulu dan juga menentukannya saat memasang. Lihat Menggunakan dokumen saluran untuk informasi selengkapnya tentang topik iniMenangani dependensi PEAR dengan ComposerJika Anda sudah menggunakan dan ingin menginstal beberapa kode PEAR juga, Anda dapat menggunakan Composer untuk menangani dependensi PEAR Anda. Repositori PEAR tidak lagi didukung secara langsung oleh Composer versi 2, jadi Anda harus menambahkan repositori secara manual untuk menginstal paket PEAR _9Bagian pertama 37 akan digunakan untuk memberi tahu Komposer bahwa ia harus "menginisialisasi" (atau "menemukan" dalam terminologi PEAR) repo pear. Kemudian bagian _38 akan mengawali nama paket seperti ini
Awalan "pear" di-hardcode untuk menghindari konflik, karena saluran pir bisa sama dengan nama vendor paket lain misalnya, maka nama pendek saluran (atau URL lengkap) dapat digunakan untuk referensi di saluran mana paket itu berada Saat kode ini diinstal, kode ini akan tersedia di direktori vendor Anda dan secara otomatis tersedia melalui autoloader Composer
Untuk menggunakan paket PEAR ini, cukup referensikan seperti itu 6 39 metode pabrik atau lakukan 40 untuk mendapatkan tanggal dan waktu saat ini. Gunakan metode _41 untuk mengonversi DateTime kembali ke string untuk output 1Menghitung dengan DateTime dimungkinkan dengan kelas DateInterval. DateTime memiliki metode seperti 42 dan 43 yang menggunakan DateInterval sebagai argumen. Jangan menulis kode yang mengharapkan jumlah detik yang sama setiap hari. Pergeseran siang hari dan perubahan zona waktu akan mematahkan asumsi tersebut. Gunakan interval tanggal sebagai gantinya. Untuk menghitung perbedaan tanggal gunakan metode _44. Ini akan mengembalikan DateInterval baru, yang sangat mudah ditampilkan 2Anda dapat menggunakan perbandingan standar pada objek DateTime 6 45 46 dan 47, perlu pertimbangan khusus. Fungsi-fungsi ini sering kali memiliki pasangan _48. misalnya, 49 dan 50. String _48 ini tersedia untuk Anda melalui Multibyte String Extension, dan dirancang khusus untuk beroperasi pada string UnicodeAnda harus menggunakan fungsi _48 setiap kali Anda mengoperasikan string Unicode. Misalnya, jika Anda menggunakan _53 pada string UTF-8, ada kemungkinan hasilnya akan menyertakan beberapa karakter setengah kacau. Fungsi yang benar untuk digunakan adalah mitra multibyte, 54Bagian yang sulit adalah mengingat untuk menggunakan fungsi 48 setiap saat. Jika Anda lupa sekali saja, string Unicode Anda memiliki peluang untuk dikacaukan selama pemrosesan lebih lanjutTidak semua fungsi string memiliki pasangan 48. Jika tidak ada satu untuk apa yang ingin Anda lakukan, maka Anda mungkin kurang beruntungAnda harus menggunakan fungsi _57 di bagian atas setiap skrip PHP yang Anda tulis (atau di bagian atas skrip penyertaan global Anda), dan fungsi 58 tepat setelahnya jika skrip Anda dikeluarkan ke browser. Secara eksplisit mendefinisikan pengkodean string Anda di setiap skrip akan menghemat banyak sakit kepala di jalanSelain itu, banyak fungsi PHP yang beroperasi pada string memiliki parameter opsional yang memungkinkan Anda menentukan pengkodean karakter. Anda harus selalu secara eksplisit menunjukkan UTF-8 saat diberi opsi. Misalnya, _59 memiliki opsi untuk pengkodean karakter, dan Anda harus selalu menentukan UTF-8 jika berurusan dengan string tersebut. Perhatikan bahwa pada PHP 5. 4. 0, UTF-8 adalah penyandian default untuk 59 dan 61Terakhir, Jika Anda membuat aplikasi terdistribusi dan tidak dapat memastikan bahwa ekstensi 62 akan diaktifkan, maka pertimbangkan untuk menggunakan paket Composer symfony/polyfill-mbstring. Ini akan menggunakan 62 jika tersedia, dan kembali ke fungsi non UTF-8 jika tidakUTF-8 di tingkat DatabaseJika skrip PHP Anda mengakses MySQL, ada kemungkinan string Anda dapat disimpan sebagai string non-UTF-8 di database meskipun Anda mengikuti semua tindakan pencegahan di atas Untuk memastikan string Anda beralih dari PHP ke MySQL sebagai UTF-8, pastikan database dan tabel Anda semuanya diatur ke kumpulan karakter dan susunan 64, dan bahwa Anda menggunakan kumpulan karakter 64 dalam string koneksi PDO. Lihat contoh kode di bawah ini. Ini sangat pentingPerhatikan bahwa Anda harus menggunakan rangkaian karakter _64 untuk dukungan UTF-8 lengkap, bukan rangkaian karakter 67. Lihat Bacaan Lebih Lanjut untuk mengetahui alasannyaUTF-8 di tingkat browserGunakan fungsi _58 untuk memastikan bahwa skrip PHP Anda menghasilkan string UTF-8 ke browser AndaBrowser kemudian perlu diberi tahu oleh respons HTTP bahwa halaman ini harus dianggap sebagai UTF-8. Hari ini, adalah umum untuk menyetel set karakter di header respons HTTP seperti ini 6 69 tag di tag halaman Anda 6Bacaan lebih lanjut 70. Tanggal kembali ke tahun 1995 dan masih merupakan implementasi lengkap untuk menerjemahkan perangkat lunak. Cukup mudah untuk berlari, sambil tetap menggunakan alat pendukung yang kuat. Ini tentang Gettext yang akan kita bicarakan di sini. Selain itu, untuk membantu Anda agar tidak berantakan pada baris perintah, kami akan menyajikan aplikasi GUI hebat yang dapat digunakan untuk memperbarui sumber l10n Anda dengan mudahAda perpustakaan umum yang digunakan yang mendukung Gettext dan implementasi i18n lainnya. Beberapa dari mereka mungkin tampak lebih mudah untuk diinstal atau menggunakan fitur tambahan atau format file i18n. Dalam dokumen ini, kami berfokus pada alat yang disediakan dengan inti PHP, tetapi di sini kami mencantumkan yang lain untuk dilengkapi
Kerangka kerja lain juga menyertakan modul i18n, tetapi tidak tersedia di luar basis kodenya
Jika Anda memutuskan untuk menggunakan salah satu perpustakaan yang tidak menyediakan ekstraktor, Anda mungkin ingin menggunakan format gettext, sehingga Anda dapat menggunakan toolchain gettext asli (termasuk Poedit) seperti yang dijelaskan di sisa bab ini. Dapatkan teksInstalasiAnda mungkin perlu menginstal Gettext dan library PHP terkait dengan menggunakan manajer paket Anda, seperti 77 atau 78. Setelah diinstal, aktifkan dengan menambahkan _79 (Linux/Unix) atau 80 (Windows) ke 81 AndaDi sini kita juga akan menggunakan Poedit untuk membuat file terjemahan. Anda mungkin akan menemukannya di manajer paket sistem Anda; StrukturJenis fileAda tiga file yang biasanya Anda tangani saat bekerja dengan gettext. Yang utama adalah file PO (Portable Object) dan MO (Machine Object), yang pertama adalah daftar "objek yang diterjemahkan" yang dapat dibaca dan yang kedua, biner yang sesuai untuk ditafsirkan oleh gettext saat melakukan lokalisasi. Ada juga file POT (Templat), yang berisi semua kunci yang ada dari file sumber Anda, dan dapat digunakan sebagai panduan untuk membuat dan memperbarui semua file PO. File template tersebut tidak wajib. tergantung pada alat yang Anda gunakan untuk melakukan l10n, Anda dapat melakukannya dengan baik hanya dengan file PO/MO. Anda akan selalu memiliki sepasang file PO/MO per bahasa dan wilayah, tetapi hanya satu POT per domain DomainAda beberapa kasus, dalam proyek besar, di mana Anda mungkin perlu memisahkan terjemahan ketika kata-kata yang sama menyampaikan arti yang berbeda dengan konteks tertentu. Dalam kasus tersebut, Anda membaginya menjadi domain yang berbeda. Mereka, pada dasarnya, bernama grup file POT/PO/MO, di mana nama file adalah domain terjemahan tersebut. Proyek kecil dan menengah biasanya, untuk kesederhanaan, hanya menggunakan satu domain; . Dalam proyek Symfony, misalnya, domain digunakan untuk memisahkan terjemahan untuk pesan validasi Kode lokalLokal hanyalah kode yang mengidentifikasi satu versi bahasa. Ini ditentukan mengikuti spesifikasi ISO 639-1 dan ISO 3166-1 alpha-2. dua huruf kecil untuk bahasa, secara opsional diikuti dengan garis bawah dan dua huruf besar yang menunjukkan kode negara atau wilayah. Untuk , tiga huruf digunakan Untuk beberapa pembicara, bagian negara mungkin terlihat berlebihan. Faktanya, beberapa bahasa memiliki dialek di berbagai negara, seperti Jerman Austria ( 82) atau Portugis Brasil ( 83). Bagian kedua digunakan untuk membedakan antara dialek-dialek tersebut - jika tidak ada, itu dianggap sebagai versi bahasa "generik" atau "hibrid".Struktur direktoriUntuk menggunakan Gettext, kita harus mematuhi struktur folder tertentu. Pertama, Anda harus memilih root arbitrer untuk file l10n Anda di repositori sumber Anda. Di dalamnya, Anda akan memiliki folder untuk setiap lokal yang diperlukan, dan folder ________2______84 tetap yang akan berisi semua pasangan PO/MO Anda. Contoh _7Bentuk jamakSeperti yang kami katakan di pendahuluan, bahasa yang berbeda mungkin menggunakan aturan jamak yang berbeda. Namun, gettext sekali lagi menyelamatkan kita dari masalah ini. Saat membuat file 85 baru, Anda harus mendeklarasikan aturan jamak untuk bahasa tersebut, dan potongan terjemahan yang sensitif jamak akan memiliki bentuk yang berbeda untuk setiap aturan tersebut. Saat memanggil Gettext dalam kode, Anda harus menentukan nomor yang terkait dengan kalimat, dan itu akan menghasilkan bentuk yang benar untuk digunakan - bahkan menggunakan substitusi string jika diperlukanAturan jamak mencakup jumlah bentuk jamak yang tersedia dan tes boolean dengan 86 yang akan menentukan di aturan mana angka yang diberikan jatuh (memulai hitungan dengan 0). Sebagai contoh
Sekarang setelah Anda memahami dasar cara kerja aturan jamak - dan jika tidak, harap lihat penjelasan lebih dalam tentang -, Anda mungkin ingin menyalin yang Anda perlukan dari daftar alih-alih menulisnya dengan tangan Saat memanggil Gettext untuk melakukan pelokalan pada kalimat dengan penghitung, Anda juga harus memberikannya nomor terkait. Gettext akan menentukan aturan apa yang harus berlaku dan menggunakan versi lokal yang benar. Anda harus memasukkan dalam file _85 kalimat yang berbeda untuk setiap aturan jamak yang ditentukanImplementasi sampelSetelah semua teori itu, mari kita sedikit praktis. Berikut adalah kutipan dari file 85 - jangan pedulikan dengan formatnya, tetapi dengan konten keseluruhan sebagai gantinya; 8Bagian pertama berfungsi seperti header, memiliki 92 dan 93 terutama kosong. Ini menjelaskan pengkodean file, bentuk jamak dan hal-hal lain yang kurang relevan. Bagian kedua menerjemahkan string sederhana dari bahasa Inggris ke Portugis Brasil, dan bagian ketiga melakukan hal yang sama, tetapi memanfaatkan penggantian string dari 94 sehingga terjemahan dapat berisi nama pengguna dan tanggal kunjungan. Bagian terakhir adalah contoh bentuk pluralisasi, menampilkan versi tunggal dan jamak sebagai 92 dalam bahasa Inggris dan terjemahannya sebagai 93 0 dan 1 (mengikuti nomor yang diberikan oleh aturan jamak). Di sana, penggantian string juga digunakan sehingga jumlahnya dapat dilihat langsung dalam kalimat, dengan menggunakan 97. Bentuk jamak selalu memiliki dua _92 (tunggal dan jamak), sehingga disarankan untuk tidak menggunakan bahasa yang rumit sebagai sumber terjemahanDiskusi tentang kunci l10nSeperti yang mungkin Anda perhatikan, kami menggunakan sebagai ID sumber kalimat yang sebenarnya dalam bahasa Inggris. _92 itu sama digunakan di seluruh 85 file Anda, artinya bahasa lain akan memiliki format yang sama dan bidang 92 yang sama tetapi diterjemahkan 93 barisBerbicara tentang kunci terjemahan, ada dua “aliran” utama di sini
Manual Gettext lebih menyukai pendekatan pertama karena, secara umum, lebih mudah bagi penerjemah dan pengguna jika ada masalah. Begitulah cara kami akan bekerja di sini juga. Namun, lebih menyukai terjemahan berbasis kata kunci, untuk memungkinkan perubahan independen dari semua terjemahan tanpa mempengaruhi template juga Penggunaan sehari-hariDalam aplikasi tipikal, Anda akan menggunakan beberapa fungsi Gettext saat menulis teks statis di halaman Anda. Kalimat-kalimat itu kemudian akan muncul dalam _85 file, diterjemahkan, dikompilasi menjadi 12 file dan kemudian, digunakan oleh Gettext saat merender antarmuka yang sebenarnya. Mengingat itu, mari kita satukan apa yang telah kita diskusikan sejauh ini dalam contoh langkah demi langkah1. Contoh file template, termasuk beberapa panggilan gettext yang berbeda _9
2. Contoh file penyiapan (brew unlink php
brew link --overwrite [email protected]
|