Mari Memahami PSR (PHP Standards Recommendation)

2.387 visualizações

Publicada em

Mari belajar memahami Hasil dari PHP-FIG (Framework Interoperability Group) yaitu PHP Standards Recommendation sehingga menghasilkan php code style yang baik.

Publicada em: Tecnologia
2 comentários
6 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
2.387
No SlideShare
0
A partir de incorporações
0
Número de incorporações
19
Ações
Compartilhamentos
0
Downloads
177
Comentários
2
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Mari Memahami PSR (PHP Standards Recommendation)

  1. 1. Mari Memahami PSR oleh Mizan Rizqia
  2. 2. Latar Belakang ● PHP bahasa yg berkembang ● PHP tidak standar ● PHP tidak ada spesifikasi yg nyata
  3. 3. Latar Belakang PHP 5.4 ● OOP Lengkap ● banyak fungsi baru
  4. 4. Bagaimana dgn Framework?
  5. 5. Masalah ● Banyak PHP framework ● Haruskah belajar semua PHP framework? ● Apa framework yang bagus? ● Apakah harus terpaku 1 PHP framework?
  6. 6. PHP-FIG PHP Framework Interop Group
  7. 7. Misi PHP-FIG Menemukan cara untuk membuat framework-framework PHP mampu bekerja bersama-sama
  8. 8. 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….
  9. 9. Hasil PHP-FIG PHP Standards Recommendation (PSR)
  10. 10. PSR-0 Autoloading Standard
  11. 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. 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.
  13. 13. PSR-0 Contoh ● SymfonyCoreRequest => /path/to/project/lib/vendor/Symfony/Core/Request.php ● ZendAcl => /path/to/project/lib/vendor/Zend/Acl.php ● ZendMailMessage => /path/to/project/lib/vendor/Zend/Mail/Message.php
  14. 14. PSR-0 Contoh Implementasi ● http://laravel.io/bin/yGE6D
  15. 15. PSR-1 Basic Coding Standard
  16. 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. 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. 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. 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. 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. 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()
  22. 22. PSR-2 Coding Style Guide
  23. 23. PSR-2 Coding Style Guide PSR ini penambahan dari PSR-1, dan seperangkat aturan mengenai bagaimana memformat kode PHP.
  24. 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. 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.
  26. 26. PSR-2 Contoh Implementasi http://laravel.io/bin/Mk5dJ
  27. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  39. 39. > phpcs --standard=PSR2 *.php https://github.com/squizlabs/PHP_CodeSniffer
  40. 40. PSR-3 Logger Interface
  41. 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. 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.
  43. 43. https://github.com/php-fig/log
  44. 44. { “require”: { “psr/log”: “dev-master” } }
  45. 45. Monolog
  46. 46. PSR-4 Improved Autoloading
  47. 47. PSR-4 Improved Autoloading Sebagai extention untuk PSR-0, PSR-4 menambahkan metode peningkatan autoloading, dan juga menjelaskan persyaratan path file dari autoloader interoperable.
  48. 48. PSR-0 Way
  49. 49. PSR-4 Way
  50. 50. 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
  51. 51. Matur Sembah Nuwun Thank you Mizan Rizqia baobaz@tlab.co.id 081806406692 @mizanrizqia /mizanr

×