Pengantar Rekomendasi Standar PHP (PSR)
Diterbitkan: 2019-12-24Sekali waktu, di sebuah konferensi, pengembang utama dari pilihan kerangka kerja duduk di ruangan yang sama dan menyetujui beberapa standar untuk semua proyek mereka untuk digunakan. Tujuannya adalah untuk membuat kerangka kerja dan pustaka PHP lebih mudah digabungkan bagi pengguna. Saat itulah php-fig: PHP Framework Interop Group lahir. Kelompok individu yang luar biasa ini mengawasi Rekomendasi Standar PHP (PSR).
Rekomendasi Standar PHP (PSR) adalah spesifikasi PHP yang diterbitkan oleh PHP Framework Interoperability Group (PHP-FIG). Ini melayani standarisasi konsep pemrograman dalam PHP. Tujuannya adalah untuk memungkinkan interoperabilitas komponen. PHP-FIG dibentuk oleh beberapa pendiri kerangka kerja PHP.
PSR-0 & PSR-4
Ini menjelaskan spesifikasi untuk kelas pemuatan otomatis dari jalur file. PSR-0 dan PSR-4 keduanya standar mengenai ruang nama, nama kelas dan jalur file. PSR ini juga menjelaskan tempat untuk meletakkan file yang akan di autoloaded sesuai dengan spesifikasinya.
Pemuatan otomatis
Autoloading adalah fungsi untuk membantu pengembang memasukkan kelas PHP secara otomatis tanpa menulis pernyataan include/require yang berantakan di mana-mana.
Dalam PHP, definisi kelas dimuat dengan pernyataan memerlukan atau menyertakan dalam file yang mereka panggil yaitu, sebelum menggunakannya seperti yang ditunjukkan di bawah ini.

Pendekatan di atas menimbulkan beberapa masalah seolah-olah kita memiliki puluhan kelas eksternal untuk digunakan dalam sebuah file dan kita mulai menulis baris pernyataan require/include tepat di awal file sumber.
Untuk mengatasi masalah ini PHP 5 memperkenalkan fungsi ajaib __autoload() yang secara otomatis dipanggil ketika kode Anda merujuk ke kelas atau antarmuka yang belum dimuat.

Berikut adalah contoh implementasi __autoload() dasar:

Kelemahan utama dari fungsi __autoload() adalah Anda hanya dapat menyediakan satu autoloader dengannya. PHP 5.1.2 memperkenalkan fungsi pemuatan otomatis lainnya (spl_autoload_register) untuk mengatasi batasan __autoload .
Pengenalan spl_autoload_register() memberi pemrogram kemampuan untuk membuat rantai autoload, serangkaian fungsi yang dapat dipanggil untuk mencoba dan memuat kelas atau antarmuka.
Sebagai contoh:


Pemuatan otomatis adalah ide yang sangat bagus sehingga setiap proyek mulai menggunakannya. Tak pelak lagi semua orang membuat versi autoloader mereka sendiri karena standar yang seragam masih kurang. Jelas, PHP sangat membutuhkan standar untuk autoloader, begitulah lahirnya PSR-0. Standar autoloader terbaru yang diterima adalah PSR-4.
PSR-0 (Standar Pemuatan Otomatis)
Ikhtisar PSR-0:
- Ruang nama dan kelas yang sepenuhnya memenuhi syarat harus memiliki struktur berikut:
\<Nama Vendor>\(<Namespace>\)*<Nama Kelas> - Setiap namespace harus memiliki namespace tingkat atas ("Nama Vendor").
- Setiap namespace dapat memiliki sebanyak mungkin sub-namespace yang diinginkan.
- Setiap pemisah namespace diubah menjadi DIRECTORY_SEPARATOR saat memuat dari sistem file.
- Setiap karakter _ dalam NAMA KELAS diubah menjadi DIRECTORY_SEPARATOR. Karakter _ tidak memiliki arti khusus dalam namespace.
- Namespace dan kelas yang sepenuhnya memenuhi syarat diberi akhiran .php saat memuat dari sistem file.
- Karakter alfabet dalam nama vendor, ruang nama, dan nama kelas dapat berupa kombinasi huruf kecil dan huruf besar apa pun.
Contoh:
\Doctrine\Common\IsolatedClassLoader =>
/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request =>
/path/ke/project/lib/vendor/Symfony/Core/Request.php
PSR-4 (Standar Pemuatan Otomatis)
Ikhtisar PSR-4:
- Istilah "kelas" mengacu pada kelas, antarmuka, sifat, dan struktur serupa lainnya.
- Nama kelas yang sepenuhnya memenuhi syarat memiliki formulir berikut:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName> - Nama kelas yang sepenuhnya memenuhi syarat HARUS memiliki nama ruang nama tingkat atas, juga dikenal sebagai "ruang nama vendor".
- Nama kelas yang sepenuhnya memenuhi syarat MUNGKIN memiliki satu atau lebih nama sub-namespace.
- Nama kelas yang sepenuhnya memenuhi syarat HARUS memiliki nama kelas yang mengakhiri.
- Garis bawah tidak memiliki arti khusus di bagian mana pun dari nama kelas yang sepenuhnya memenuhi syarat.
- Karakter abjad dalam nama kelas yang sepenuhnya memenuhi syarat DAPAT berupa kombinasi huruf kecil dan huruf besar.
- Semua nama kelas HARUS dirujuk dengan cara yang peka huruf besar/kecil.
Contoh Autoloading berbasis PSR-4 menggunakan Composer:
- Pertimbangkan struktur direktori berikut untuk mencapai autoloading berbasis PSR-4 menggunakan composer.

- Buat file composer.json menggunakan composer init. Jika tidak, Anda dapat membuatnya secara manual sekarang di root proyek Anda.

- Siapkan autoloading PSR4 dengan mengedit file composer.json seperti gambar di bawah ini:

- Di sini, CodeCourse adalah nama vendor aplikasi Anda, Anda dapat menggunakan nama ini saat memberi nama file di dalam direktori src Anda, seperti:

Atau


dll,
- Dan src adalah direktori aplikasi Anda yang ingin Anda muat secara otomatis.
- Selanjutnya, buka terminal Anda dan ketik perintah berikut untuk menginstal file autoloading di proyek Anda. Ini akan menghasilkan direktori vendor dan file autoload.php di dalamnya.

- Pertama-tama mari kita buat beberapa kelas di dalam direktori CodeCourse.
Buat AuthFilters.php di dalam CodeCourse/Filters

Buat UserRepository.php di dalam CodeCourse/Repositories

- Terakhir, buat file index.php untuk mengujinya dan perlu sekali file autoload.php ke dalam file index.php Anda.

PSR-1 & PSR-2
PSR-1 dan PSR-2 berguna untuk standar pengkodean PHP. PSR-1 terutama berfokus pada standar pengkodean dasar untuk PHP sedangkan PSR-2 lebih seperti versi yang diperluas dari PSR-1. PSR-1 mencantumkan seperangkat aturan sederhana untuk konvensi penamaan dan PSR-2 menyediakan panduan gaya pengkodean yang lebih komprehensif.
PSR-1 (Standar Pengkodean Dasar)
Ikhtisar PSR-1:
- Hanya <?php atau <?= yang diperbolehkan untuk tag PHP.
- Nama kelas harus didefinisikan di UpperCamelCase.
- Variabel kelas harus didefinisikan dalam camelCase.
- Konstanta kelas harus didefinisikan dalam UPPER_SNAKE_CASE.
- Nama metode harus didefinisikan dalam camelCase.
- File HARUS mendeklarasikan simbol (kelas, fungsi, konstanta, dll.) atau menyebabkan efek samping (misalnya menghasilkan output, mengubah pengaturan .ini, dll.) tetapi TIDAK HARUS melakukan keduanya. Yaitu,

Contoh di atas menyebabkan efek samping, yaitu memuat file bernama "file.php".
- File harus dalam UTF-8 tanpa BOM (Byte Order Mark).
- Ruang nama dan nama kelas harus mengikuti standar di PSR-0 dan PSR-4.
Berikut adalah contoh yang menggambarkan konvensi penamaan dasar untuk properti, kelas, dan metode.

PSR-2 (Panduan Gaya Pengkodean)
Ikhtisar PSR-2:
- Anda harus mengikuti standar pengkodean PSR-1.
- 4 spasi harus digunakan untuk indentasi. Menggunakan tab tidak diperbolehkan.
- Tidak ada batasan panjang garis, tetapi harus di bawah 120 karakter, dan paling baik jika di bawah 80.
- Harus ada satu baris kosong setelah deklarasi namespace dan harus ada satu baris kosong setelah deklarasi blok penggunaan.
- Kurung kurawal buka untuk kelas dan metode harus berada pada baris berikutnya dan kurung kurawal penutup harus berada pada baris setelah badan.
- Metode dan properti harus didefinisikan dengan abstract/final terlebih dahulu, diikuti dengan public/protected, dan terakhir dengan kata kunci static.
- Anda tidak boleh meletakkan baris baru sebelum kurung kurawal dalam pernyataan bersyarat.
- Anda tidak boleh meletakkan spasi sebelum ( dan ) dalam pernyataan bersyarat.
- Contoh untuk mendefinisikan kelas:
- Anda harus membuka kurung kurawal pada baris baru dan kata kunci extends dan implements harus digunakan dalam satu baris.

Jika ada beberapa antarmuka untuk diimplementasikan, maka Anda dapat menulis nama antarmuka di baris baru seperti yang ditunjukkan di bawah ini:

Contoh untuk menunjukkan bagaimana metode didefinisikan dalam PHP:
Saat mendefinisikan metode, argumen harus ditulis dalam baris yang sama. Juga, Anda tidak boleh meletakkan spasi putih sebelum koma dalam argumen, dan Anda harus meletakkan satu spasi putih setelahnya.

Jika ada banyak jumlah argumen, maka mereka dapat ditulis di baris baru satu demi satu:

Saat mendefinisikan metode, Anda harus memiliki salah satu dari public/protected/private dan abstract/final. Mode visibilitas muncul setelah kata kunci abstract/final, jika digunakan. static adalah pengubah terakhir.

Pernyataan bersyarat
- Anda harus meletakkan satu spasi sebelum (
- Anda tidak boleh meletakkan spasi putih setelah (
- Anda tidak boleh meletakkan spasi putih sebelumnya )
- Anda harus meletakkan satu spasi setelah )
- gunakan elseif daripada else if.
Contoh untuk menunjukkan perbedaan antara elseif dan else if:
Interpretasi dari elseif:

Interpretasi dari else jika:

Untuk pernyataan switch,
- Kurung kurawal harus dibuka pada baris yang sama di mana pernyataan switch ditulis.
- Badan kasing harus diindentasi sekali dari kasing dan kasing harus diindentasi sekali dari sakelar.
- Gunakan tidak ada istirahat ketika istirahat tidak diperlukan.
- Anda juga dapat menggunakan return alih-alih break.
Contoh:
