Dokumen tersebut membahas tentang PHP Standards Recommendation (PSR) yang dikembangkan oleh PHP Framework Interop Group (PHP-FIG). PSR merupakan standar koding untuk PHP yang bertujuan agar berbagai framework PHP dapat saling bekerja sama dengan lebih baik."
11. PSR-0 Autoloading Standard
Bagaimana semua framework dapat bekerja sama?
● memiliki struktur direktori umum
● memilik standar autoloading umum.
JADI
Semua framework harus dibangun dengan menggunakan
konvensi autoloading yang sama.
12. PSR-0 Peraturan
1. Struktur Fully-qualified Namespace dan Class harus mengikuti struktur
<Vendor Name> (<Namespace>) * <Class Name>
2. Setiap Namespace harus memiliki top-level namespace (“Nama Vendor”).
3. Setiap Namespace dapat memiliki banyak sub-namespace sesuai
kebutuhan.
4. Setiap separator namespace diubah menjadi DIRECTORY_SEPARATOR
ketika loading dari sistem file.
5. Setiap karakter _ (Underscore) dalam CLASS NAME diubah menjadi
DIRECTORY_SEPARATOR. Karakter _ (Underscore) tidak memiliki arti
khusus dalam namespace.
6. Fully-qualified Namespace dan Class berakhiran .php ketika loading dari
sistem file.
7. Urutan abjad dalam penamaan vendor, namespace, dan class merupakan
kombinasi dari huruf kecil dan huruf besar.
16. PSR-1 Basic Coding Standard
Ini adalah tawaran PSR untuk standarisasi pengkodean
PHP, dan idenya adalah jika semua pengembang
menggunakan standar yang sama, maka akan mudah
untuk memindahkan modul tanpa masalah.
17. PSR-1 Peraturan
1. File HARUS menggunakan <?php dan <?= tags
2. File HARUS menggunakan UTF-8 tanpa BOM untuk PHP Code.
3. File SEBAIKNYA dapat mendeklarasikan simbol (classes, functions,
constants, dll) atau yang menyebabkan efek samping (generate output,
change .ini settings, dll) tapi HARUS TIDAK melakukan keduanya.
4. Namespace dan Class HARUS mengikuti PSR-0.
5. Nama Class HARUS dideklarasikan dalam StudlyCaps
6. Constant kelas HARUS dinyatakan dalam huruf besar semua dengan
pemisah underscore
7. Nama Method HARUS dinyatakan dalam CamelCase
18. PSR-1 Files
PHP Tags
PHP code HARUS menggunakan
<?php ?> atau short-echo <?= ?>
Tidak boleh menggunakan variasi lainnya.
Character Encoding
Kode PHP HARUS menggunakan UTF-8 tanpa BOM
19. PSR-1 Files
Side Effects
Contoh penggunaan deklarasi dan side effects bersamaan
yang harus dihindari
http://laravel.io/bin/YydOn
Contoh penggunaan deklarasi tanpa side effects
http://laravel.io/bin/mGMlj
20. PSR-1 Namespace & Class Name
● Namespace & Class Name HARUS mengikuti PSR-0
● Class Name HARUS StudlyCaps
Contoh Namespace dan Class Name
http://laravel.io/bin/bEBGX
21. PSR-1 Class Constant, Properties, Methods
Constant
Class Constant: upper case with underscore seperator
http://laravel.io/bin/Xy7Dj
Properties
Penamaan SEHARUSNYA konsisten sesuai scope. Contoh scope: vendor-level,
package-level, class-level, or method-level.
Methods
Method names HARUS camelCase()
23. PSR-2 Coding Style Guide
PSR ini penambahan dari PSR-1, dan
seperangkat aturan mengenai bagaimana
memformat kode PHP.
24. PSR-2 Peraturan
1. Kode HARUS berdasarkan PSR-1.
2. Kode harus menggunakan 4 spasi untuk indentasi, bukan tab.
3. TIDAK HARUS ada batas pada panjang baris; batas soft HARUS 120
karakter, setiap baris SEHARUSNYA 80 karakter atau kurang.
4. HARUS ada satu baris kosong setelah deklarasi namespace, dan HARUS
ada satu baris kosong setelah blok use deklarasi.
5. Pembuka Brace ( Kurung kurawal ) untuk Class HARUS pada baris
berikutnya, dan menutup Brace HARUS ada pada baris berikutnya setelah
body class.
6. Membuka Brace untuk method HARUS pada baris berikutnya, dan
menutup kawat gigi HARUS pada baris berikutnya setelah body method.
25. PSR-2 Peraturan (lanjutan)
7. Visibility HARUS dideklarasikan pada semua properti dan metode; abstract
dan final harus dideklarasikan sebelum Visibility, static HARUS
menyatakan setelah Visibility.
8. Control struktur keyword HARUS memiliki satu spasi setelahnya; namun
pada pemanggilan method dan function TIDAK HARUS.
9. Membuka Brace untuk struktur Control HARUS pada baris yang sama,
dan menutup kawat gigi HARUS pergi pada baris berikutnya setelah body
control.
10. Kurung buka untuk struktur kontrol TIDAK HARUS memiliki spasi setelah
mereka, dan menutup kurung untuk struktur kontrol TIDAK HARUS
memiliki spasi sebelumnya.
27. PSR-2 General
Basic Coding Standard
● Code HARUS mengikuti semua aturan PSR-1
Files
● Semua PHP files HARUS menggunakan Unix LF (linefeed) line ending
● Semua PHP files HARUS berakhir dengan single blank line
Lines
● HARUS TIDAK terlalu panjang barisnya.
● soft limit HARUS 120 karakter
● SEBAIKNYA 80 karakter
28. PSR-2 General
Indenting
● Code HARUS menggunakan 4 space untuk indenting
● Code HARUS TIDAK menggunaan tabs untuk indenting
N.b.: Using only spaces, and not mixing spaces with tabs, helps to avoid
problems with diffs, patches, history, and annotations. The use of spaces
also makes it easy to insert fine-grained sub-indentation for inter-line
alignment.
Keywords and True/False/Null
● PHP Keyword HARUS lower case
● PHP constants true, false, null HARUS lower case
29. PSR-2 Namespace & Declarations
● Setelah deklarasi namespace HARUS ada 1 baris kosong.
● Semua deklarasi use HARUS berada di bawah deklarasi namespace
● Deklarasi use HARUS untuk 1 keyword.
● Setelah deklarasi blok use HARUS ada 1 baris kosong.
Contoh
http://laravel.io/bin/1y4ne
30. PSR-2 Classes, Properties, Methods
Extends & Implements
● keyword extends dan implements HARUS
dideklarasikan dalam 1 baris
Contoh
http://laravel.io/bin/BLoka
● Beberapa implements BOLEH dipisah menjadi
beberapa baris, dimana setiap baris di-indent sekali.
Contoh
http://laravel.io/bin/2Wknr
31. PSR-2 Classes, Properties, Methods
Properties
● penglihatan/visibility HARUS dideklarasikan pada semua property
● keyword var, HARUS TIDAK digunakan untuk mendeklarasikan property
● HARUS TIDAK lebih dari 1 property per statement.
● SEBAIKNYA TIDAK diberi awalan single underscore ( _ ) untuk
mengindikasikan protected atau private visibility
Contoh
http://laravel.io/bin/VPzrn
32. PSR-2 Classes, Properties, Methods
Methods
● penglihatan/visibility HARUS dideklarasikan pada semua method
● Nama Method SEBAIKNYA TIDAK diberi awalan single underscore ( _ )
untuk mengindikasikan protected atau private visibility
● Nama Method HARUS TIDAK dideklarasikan dengan spasi setelah nama
method.
● Kurung buka dan kurung tutup HARUS berada dalam baris yang sama
dengan nama method.
● HARUS TIDAK boleh ada spasi setelah opening parenthesis dan sebelum
closing parenthesis.
● Contoh: http://laravel.io/bin/LkmGe
33. PSR-2 Classes, Properties, Methods
Method Arguments
● HARUS TIDAK ada space sebelum koma, dan HARUS ada space seteleh
setiap koma.
● Method arguments dengan nilai default HARUS berada dibelakang daftar
argumen.
Contoh: http://laravel.io/bin/wJnYx
● Daftar argumen BOLEH dipisah menjadi beberapa baris, dimana setiap
baris diberi 1 indent.
Contoh: http://laravel.io/bin/qQElo
34. PSR-2 Classes, Properties, Methods
abstract, final, and static
● Deklarasi abstract dan final HARUS berada sebelum deklarasi
visibility.
● Deklarasi static HARUS berada setelah deklarasi visibility.
● Contoh: http://laravel.io/bin/0e4yw
35. PSR-2 Classes, Properties, Methods
Method & Function
● HARUS TIDAK ada space antara nama method/function dengan kurung
buka dan HARUS TIDAK ada space setelah kurung buka
● HARUS TIDAK ada space sebelum kurung tutup dan HARUS TIDAK ada
space setelah kurung tutup.
Contoh: http://laravel.io/bin/7we1z
● Daftar argumen BOLEH dipotong menjadi beberapa baris, dimana setiap
baris diberi 1 indent.
Contoh: http://laravel.io/bin/jQyP7
36. PSR-2 Control Structures
● HARUS ada 1 spasi setelah control structures keyword
● HARUS TIDAK ada spasi setelah opening parenthesis
● HARUS TIDAK ada spasi sebelum closing parenthesis
● HARUS ada spasi antara closing parenthesis dengan
opening brace
● Structured body HARUS ada 1 indent
● Closing brace HARUS berada pada baris selanjutnya
setelah body.
37. PSR-2 Control Structures
● if, elseif, else
contoh: http://laravel.io/bin/8Kq37
● switch, case
contoh: http://laravel.io/bin/aNB5P
● while, do while
contoh: http://laravel.io/bin/okY2w
● for
contoh: http://laravel.io/bin/vB4mV
● foreach
contoh: http://laravel.io/bin/yGEYR
● try, catch
contoh: http://laravel.io/bin/52YWn
38. PSR-2 Closures
● Contoh deklarasi closure
http://laravel.io/bin/kWxk0
● Contoh deklarasi daftar argumen pada closure
http://laravel.io/bin/l5vxV
● Contoh deklarasi closure pada function or method call
http://laravel.io/bin/W4Q95
41. PSR-3 Logger Interface
Peraturan PSR-3 untuk logging, dan secara khusus
memaparkan sembilan metode untuk tata cara menulis log
pada library framework. Hal ini membuat pemangkasan
universal untuk semua kerangka, yang berarti akan
mempermudah ketika ingin menerapkan logging dalam
framework yang sebelumnya tidak mempunyai fungsi
tersebut.
42. PSR-3 Cara
1. LoggerInterface memperlihatkan delapan metode untuk menulis log ke
dalam RFC 5424 (debug, info, notice, warning, error, critical, alert,
emergency).
2. Metode kesembilan (log), menerima tingkat log sebagai argumen pertama.
Pemanggilan metode ini dengan salah satu dari tingkat konstanta log
HARUS memiliki hasil yang sama seperti pemanggilan metode tingkat-spesifik.
Pemanggilan metode ini dengan tidak disertai konstanta level oleh
HARUS mengeluarkan PsrLogInvalidArgumentException jika
pelaksanaannya tidak berhasil. Pengguna SEBAIKNYA TIDAK
menggunakan tingkat log kustom tanpa mengetahui pasti cara
pengimplementasiannya.
49. PSR-4 Improved Autoloading
Sebagai extention untuk PSR-0, PSR-4
menambahkan metode peningkatan
autoloading, dan juga menjelaskan persyaratan
path file dari autoloader interoperable.