Mari Memahami PSR (PHP Standards Recommendation)
-
Upload
mizan-riqzia -
Category
Technology
-
view
566 -
download
15
description
Transcript of Mari Memahami PSR (PHP Standards Recommendation)
Mari Memahami PSRoleh
Mizan Rizqia
Latar Belakang
● PHP bahasa yg berkembang
● PHP tidak standar
● PHP tidak ada spesifikasi yg nyata
Latar Belakang
PHP 5.4● OOP Lengkap
● banyak fungsi baru
Bagaimana dgn Framework?
● Banyak PHP framework
● Haruskah belajar semua PHP framework?
● Apa framework yang bagus?
● Apakah harus terpaku 1 PHP framework?
Masalah
PHP-FIGPHP Framework Interop Group
Misi
Menemukan cara untuk membuat framework-framework
PHP mampu bekerja bersama-sama
PHP-FIG
Anggota PHP-FIG● Agavi● AWS SDK for PHP (Amazon
Web Services)● Apache log4php● Assetic and Buzz● Aura Project and Solar
Framework● CakePHP● Composer and Packagist● Contao Open Source CMS● Doctrine● Drupal● eZ Publish● TYPO3 Flow● Jackalope● Joomla● Laravel
● Lithium● PEAR● phpBB● phpDocumentor● PPI Framework● Propel● PyroCMS● SabreDAV● Sculpin● SugarCRM● Symfony2● Yii framework● Zend Framework 2● Zikula● lainnya….
Hasil PHP-FIG
PHP Standards Recommendation(PSR)
PSR-0Autoloading Standard
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.
PSR-0 Peraturan1. 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.
PSR-0 Contoh
● \Symfony\Core\Request =>
/path/to/project/lib/vendor/Symfony/Core/Request.php
● \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
● \Zend\Mail\Message =>
/path/to/project/lib/vendor/Zend/Mail/Message.php
PSR-0 Contoh Implementasi
● http://laravel.io/bin/yGE6D
PSR-1Basic Coding Standard
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.
PSR-1 Peraturan1. 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
PSR-1 Files
PHP TagsPHP code HARUS menggunakan
<?php ?> atau short-echo <?= ?>
Tidak boleh menggunakan variasi lainnya.
Character EncodingKode PHP HARUS menggunakan UTF-8 tanpa BOM
PSR-1 Files
Side EffectsContoh penggunaan deklarasi dan side effects bersamaan yang harus dihindarihttp://laravel.io/bin/YydOn
Contoh penggunaan deklarasi tanpa side effectshttp://laravel.io/bin/mGMlj
PSR-1 Namespace & Class Name
● Namespace & Class Name HARUS mengikuti PSR-0● Class Name HARUS StudlyCaps
Contoh Namespace dan Class Namehttp://laravel.io/bin/bEBGX
PSR-1 Class Constant, Properties, Methods
ConstantClass Constant: upper case with underscore seperatorhttp://laravel.io/bin/Xy7Dj
PropertiesPenamaan SEHARUSNYA konsisten sesuai scope. Contoh scope: vendor-level, package-level, class-level, or method-level.
MethodsMethod names HARUS camelCase()
PSR-2Coding Style Guide
PSR-2 Coding Style Guide
PSR ini penambahan dari PSR-1, dan
seperangkat aturan mengenai bagaimana
memformat kode PHP.
PSR-2 Peraturan1. 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.
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.
PSR-2 Contoh Implementasi
http://laravel.io/bin/Mk5dJ
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
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
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
PSR-2 Classes, Properties, Methods
Extends & Implements● keyword extends dan implements HARUS
dideklarasikan dalam 1 barisContohhttp://laravel.io/bin/BLoka
● Beberapa implements BOLEH dipisah menjadi beberapa baris, dimana setiap baris di-indent sekali.Contohhttp://laravel.io/bin/2Wknr
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
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
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
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
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
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.
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
PSR-2 Closures
● Contoh deklarasi closurehttp://laravel.io/bin/kWxk0
● Contoh deklarasi daftar argumen pada closurehttp://laravel.io/bin/l5vxV
● Contoh deklarasi closure pada function or method callhttp://laravel.io/bin/W4Q95
> phpcs --standard=PSR2 *.php
https://github.com/squizlabs/PHP_CodeSniffer
PSR-3Logger Interface
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.
PSR-3 Cara1. 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 Psr\Log\InvalidArgumentException jika
pelaksanaannya tidak berhasil. Pengguna SEBAIKNYA TIDAK
menggunakan tingkat log kustom tanpa mengetahui pasti cara
pengimplementasiannya.
{
“require”: {
“psr/log”: “dev-master”
}
}
Monolog
PSR-4Improved Autoloading
PSR-4 Improved Autoloading
Sebagai extention untuk PSR-0, PSR-4
menambahkan metode peningkatan
autoloading, dan juga menjelaskan persyaratan
path file dari autoloader interoperable.
PSR-0 Way
PSR-4 Way
Referensi● http://idtut.com/2014/apa-itu-php-fig-dan-apa-yang-mereka-lakukan/● http://www.php-fig.org/● https://github.com/php-fig/fig-standards● http://www.sitepoint.com/autoloading-and-the-psr-0-standard/● http://www.slideshare.net/arambaghdasaryan/coding-standards-psr1-psr2● http://www.slideshare.net/MinskPHPUserGroup/psr-36450518● http://www.slideshare.net/loalf/fig-and-psr