Top Banner
Mari Memahami PSR oleh Mizan Rizqia
53

Mari Memahami PSR (PHP Standards Recommendation)

Jul 05, 2015

Download

Technology

Mizan Riqzia

Mari belajar memahami Hasil dari PHP-FIG (Framework Interoperability Group) yaitu PHP Standards Recommendation sehingga menghasilkan php code style yang baik.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mari Memahami PSR (PHP Standards Recommendation)

Mari Memahami PSRoleh

Mizan Rizqia

Page 2: Mari Memahami PSR (PHP Standards Recommendation)

Latar Belakang

● PHP bahasa yg berkembang

● PHP tidak standar

● PHP tidak ada spesifikasi yg nyata

Page 3: Mari Memahami PSR (PHP Standards Recommendation)

Latar Belakang

PHP 5.4● OOP Lengkap

● banyak fungsi baru

Page 4: Mari Memahami PSR (PHP Standards Recommendation)

Bagaimana dgn Framework?

Page 5: Mari Memahami PSR (PHP Standards Recommendation)

● Banyak PHP framework

● Haruskah belajar semua PHP framework?

● Apa framework yang bagus?

● Apakah harus terpaku 1 PHP framework?

Masalah

Page 6: Mari Memahami PSR (PHP Standards Recommendation)

PHP-FIGPHP Framework Interop Group

Page 7: Mari Memahami PSR (PHP Standards Recommendation)

Misi

Menemukan cara untuk membuat framework-framework

PHP mampu bekerja bersama-sama

PHP-FIG

Page 8: Mari Memahami PSR (PHP Standards Recommendation)

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….

Page 9: Mari Memahami PSR (PHP Standards Recommendation)

Hasil PHP-FIG

PHP Standards Recommendation(PSR)

Page 10: Mari Memahami PSR (PHP Standards Recommendation)

PSR-0Autoloading Standard

Page 11: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 12: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 13: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 14: Mari Memahami PSR (PHP Standards Recommendation)

PSR-0 Contoh Implementasi

● http://laravel.io/bin/yGE6D

Page 15: Mari Memahami PSR (PHP Standards Recommendation)

PSR-1Basic Coding Standard

Page 16: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 17: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 18: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 19: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 20: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 21: Mari Memahami PSR (PHP Standards Recommendation)

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()

Page 22: Mari Memahami PSR (PHP Standards Recommendation)

PSR-2Coding Style Guide

Page 23: Mari Memahami PSR (PHP Standards Recommendation)

PSR-2 Coding Style Guide

PSR ini penambahan dari PSR-1, dan

seperangkat aturan mengenai bagaimana

memformat kode PHP.

Page 24: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 25: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 26: Mari Memahami PSR (PHP Standards Recommendation)

PSR-2 Contoh Implementasi

http://laravel.io/bin/Mk5dJ

Page 27: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 28: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 29: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 30: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 31: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 32: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 33: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 34: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 35: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 36: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 37: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 38: Mari Memahami PSR (PHP Standards Recommendation)

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

Page 39: Mari Memahami PSR (PHP Standards Recommendation)

> phpcs --standard=PSR2 *.php

https://github.com/squizlabs/PHP_CodeSniffer

Page 40: Mari Memahami PSR (PHP Standards Recommendation)

PSR-3Logger Interface

Page 41: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 42: Mari Memahami PSR (PHP Standards Recommendation)

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.

Page 43: Mari Memahami PSR (PHP Standards Recommendation)
Page 44: Mari Memahami PSR (PHP Standards Recommendation)
Page 45: Mari Memahami PSR (PHP Standards Recommendation)

https://github.com/php-fig/log

Page 46: Mari Memahami PSR (PHP Standards Recommendation)

{

“require”: {

“psr/log”: “dev-master”

}

}

Page 47: Mari Memahami PSR (PHP Standards Recommendation)

Monolog

Page 48: Mari Memahami PSR (PHP Standards Recommendation)

PSR-4Improved Autoloading

Page 49: Mari Memahami PSR (PHP Standards Recommendation)

PSR-4 Improved Autoloading

Sebagai extention untuk PSR-0, PSR-4

menambahkan metode peningkatan

autoloading, dan juga menjelaskan persyaratan

path file dari autoloader interoperable.

Page 50: Mari Memahami PSR (PHP Standards Recommendation)

PSR-0 Way

Page 51: Mari Memahami PSR (PHP Standards Recommendation)

PSR-4 Way

Page 53: Mari Memahami PSR (PHP Standards Recommendation)

Matur Sembah NuwunThank you

Mizan Rizqia

[email protected]@mizanrizqia/mizanr