SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Mari Memahami PSR 
oleh 
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?
Masalah 
● Banyak PHP framework 
● Haruskah belajar semua PHP framework? 
● Apa framework yang bagus? 
● Apakah harus terpaku 1 PHP framework?
PHP-FIG 
PHP Framework Interop Group
Misi 
PHP-FIG 
Menemukan cara untuk membuat framework-framework 
PHP mampu bekerja bersama-sama
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-0 
Autoloading 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 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.
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
PSR-0 Contoh Implementasi 
● http://laravel.io/bin/yGE6D
PSR-1 
Basic 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 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
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
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
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
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()
PSR-2 
Coding Style Guide
PSR-2 Coding Style Guide 
PSR ini penambahan dari PSR-1, dan 
seperangkat aturan mengenai bagaimana 
memformat kode PHP.
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.
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 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
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 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
> phpcs --standard=PSR2 *.php 
https://github.com/squizlabs/PHP_CodeSniffer
PSR-3 
Logger 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 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.
https://github.com/php-fig/log
{ 
“require”: { 
“psr/log”: “dev-master” 
} 
}
Monolog
PSR-4 
Improved 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
Matur Sembah Nuwun 
Thank you 
Mizan Rizqia 
baobaz@tlab.co.id 
081806406692 
@mizanrizqia 
/mizanr

Contenu connexe

Tendances

Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Swagger - make your API accessible
Swagger - make your API accessibleSwagger - make your API accessible
Swagger - make your API accessibleVictor Trakhtenberg
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API TutorialSimplilearn
 
OCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class DesignOCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class Designİbrahim Kürce
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewShahed Chowdhuri
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOPDzmitry Naskou
 
The World of PHP PSR Standards
The World of PHP PSR StandardsThe World of PHP PSR Standards
The World of PHP PSR StandardsRadu Murzea
 
Laravel introduction
Laravel introductionLaravel introduction
Laravel introductionSimon Funk
 
Standards For Java Coding
Standards For Java CodingStandards For Java Coding
Standards For Java CodingRahul Bhutkar
 
Web services with laravel
Web services with laravelWeb services with laravel
Web services with laravelConfiz
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentationVan Huong
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
An Introduction of Node Package Manager (NPM)
An Introduction of Node Package Manager (NPM)An Introduction of Node Package Manager (NPM)
An Introduction of Node Package Manager (NPM)iFour Technolab Pvt. Ltd.
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 

Tendances (20)

Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Swagger - make your API accessible
Swagger - make your API accessibleSwagger - make your API accessible
Swagger - make your API accessible
 
Vue js for beginner
Vue js for beginner Vue js for beginner
Vue js for beginner
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API Tutorial
 
OCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class DesignOCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class Design
 
PHP Basic & Variables
PHP Basic & VariablesPHP Basic & Variables
PHP Basic & Variables
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Laravel ppt
Laravel pptLaravel ppt
Laravel ppt
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 
The World of PHP PSR Standards
The World of PHP PSR StandardsThe World of PHP PSR Standards
The World of PHP PSR Standards
 
Laravel introduction
Laravel introductionLaravel introduction
Laravel introduction
 
Angular overview
Angular overviewAngular overview
Angular overview
 
Standards For Java Coding
Standards For Java CodingStandards For Java Coding
Standards For Java Coding
 
wrapper classes
wrapper classeswrapper classes
wrapper classes
 
Web services with laravel
Web services with laravelWeb services with laravel
Web services with laravel
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentation
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
An Introduction of Node Package Manager (NPM)
An Introduction of Node Package Manager (NPM)An Introduction of Node Package Manager (NPM)
An Introduction of Node Package Manager (NPM)
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Java Docs
Java DocsJava Docs
Java Docs
 

En vedette

Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHPMichael Peacock
 
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3harisonmtd
 
Understanding REST-Based Services: Simple, Scalable, and Platform Independent
Understanding REST-Based Services: Simple, Scalable, and Platform IndependentUnderstanding REST-Based Services: Simple, Scalable, and Platform Independent
Understanding REST-Based Services: Simple, Scalable, and Platform IndependentCharles Knight
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Mizan Riqzia
 
Scalable Reliable Secure REST
Scalable Reliable Secure RESTScalable Reliable Secure REST
Scalable Reliable Secure RESTguestb2ed5f
 
OOP Basic - PHP
OOP Basic - PHPOOP Basic - PHP
OOP Basic - PHPSulaeman .
 
LinkedIn SlideShare: Knowledge, Well-Presented
LinkedIn SlideShare: Knowledge, Well-PresentedLinkedIn SlideShare: Knowledge, Well-Presented
LinkedIn SlideShare: Knowledge, Well-PresentedSlideShare
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...SlideShare
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShareSlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShareSlideShare
 

En vedette (20)

Inheritance and polymorphism
Inheritance and polymorphism   Inheritance and polymorphism
Inheritance and polymorphism
 
Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHP
 
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3
Laravel 5 Tutorial : Membuat Blog Sederhana dengan Laravel 5.3
 
Understanding REST-Based Services: Simple, Scalable, and Platform Independent
Understanding REST-Based Services: Simple, Scalable, and Platform IndependentUnderstanding REST-Based Services: Simple, Scalable, and Platform Independent
Understanding REST-Based Services: Simple, Scalable, and Platform Independent
 
Tutorial dasar laravel
Tutorial dasar laravelTutorial dasar laravel
Tutorial dasar laravel
 
Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)Nge-GIT (Belajar Git Bareng)
Nge-GIT (Belajar Git Bareng)
 
PHP CODING STANDARDS
PHP CODING STANDARDSPHP CODING STANDARDS
PHP CODING STANDARDS
 
Scalable Reliable Secure REST
Scalable Reliable Secure RESTScalable Reliable Secure REST
Scalable Reliable Secure REST
 
OOP Basic - PHP
OOP Basic - PHPOOP Basic - PHP
OOP Basic - PHP
 
Fungsi-Fungsi PHP
Fungsi-Fungsi PHPFungsi-Fungsi PHP
Fungsi-Fungsi PHP
 
LinkedIn SlideShare: Knowledge, Well-Presented
LinkedIn SlideShare: Knowledge, Well-PresentedLinkedIn SlideShare: Knowledge, Well-Presented
LinkedIn SlideShare: Knowledge, Well-Presented
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 

Similaire à PSR

PHP Tips & Trik Lanjutan: Clean Code dan Coding Standar
PHP Tips & Trik Lanjutan: Clean Code dan Coding StandarPHP Tips & Trik Lanjutan: Clean Code dan Coding Standar
PHP Tips & Trik Lanjutan: Clean Code dan Coding StandarMedidu
 
Pengantar Pemrograman WEB PHP
Pengantar Pemrograman WEB PHPPengantar Pemrograman WEB PHP
Pengantar Pemrograman WEB PHPDeka M Wildan
 
Belajar php (pemula dasar)
Belajar php (pemula dasar)Belajar php (pemula dasar)
Belajar php (pemula dasar)Andi Irawan
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan LaravelEka Rahmawati
 
Tutorial dasar-laravel
Tutorial dasar-laravelTutorial dasar-laravel
Tutorial dasar-laravelDhicca Rama
 
Tutorial dasar laravel 4
Tutorial dasar laravel 4Tutorial dasar laravel 4
Tutorial dasar laravel 4Teten Nugraha
 
Bpmogrman berorientasi fungsi
Bpmogrman berorientasi fungsiBpmogrman berorientasi fungsi
Bpmogrman berorientasi fungsiAr'ko Ar'ko
 
Laravel Dasar.pptx
Laravel Dasar.pptxLaravel Dasar.pptx
Laravel Dasar.pptxssuser71d74a
 
Laravel Dasar.pptx
Laravel Dasar.pptxLaravel Dasar.pptx
Laravel Dasar.pptxHeru762601
 
Meeting 9 pemrograman shell - a
Meeting 9    pemrograman shell - a Meeting 9    pemrograman shell - a
Meeting 9 pemrograman shell - a Syaiful Ahdan
 
PROGRESS DEV - Basic Laravel 5.3 #1
PROGRESS DEV - Basic Laravel 5.3 #1PROGRESS DEV - Basic Laravel 5.3 #1
PROGRESS DEV - Basic Laravel 5.3 #1UKM PROGRESS
 
Optimize php application in high traffic environment
Optimize php application in high traffic environmentOptimize php application in high traffic environment
Optimize php application in high traffic environmentk4ndar
 

Similaire à PSR (20)

PHP Tips & Trik Lanjutan: Clean Code dan Coding Standar
PHP Tips & Trik Lanjutan: Clean Code dan Coding StandarPHP Tips & Trik Lanjutan: Clean Code dan Coding Standar
PHP Tips & Trik Lanjutan: Clean Code dan Coding Standar
 
3984793.ppt
3984793.ppt3984793.ppt
3984793.ppt
 
Modul 4 php
Modul 4 phpModul 4 php
Modul 4 php
 
Pengantar Pemrograman WEB PHP
Pengantar Pemrograman WEB PHPPengantar Pemrograman WEB PHP
Pengantar Pemrograman WEB PHP
 
Belajar php (pemula dasar)
Belajar php (pemula dasar)Belajar php (pemula dasar)
Belajar php (pemula dasar)
 
Tutorial dasar laravel
Tutorial dasar laravelTutorial dasar laravel
Tutorial dasar laravel
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan Laravel
 
Tutorial dasar-laravel
Tutorial dasar-laravelTutorial dasar-laravel
Tutorial dasar-laravel
 
Tutorial dasar laravel 4
Tutorial dasar laravel 4Tutorial dasar laravel 4
Tutorial dasar laravel 4
 
Bpmogrman berorientasi fungsi
Bpmogrman berorientasi fungsiBpmogrman berorientasi fungsi
Bpmogrman berorientasi fungsi
 
Laravel Dasar.pptx
Laravel Dasar.pptxLaravel Dasar.pptx
Laravel Dasar.pptx
 
Laravel Dasar.pptx
Laravel Dasar.pptxLaravel Dasar.pptx
Laravel Dasar.pptx
 
Pascal buku
Pascal bukuPascal buku
Pascal buku
 
Algoritma 02
Algoritma 02Algoritma 02
Algoritma 02
 
Meeting 9 pemrograman shell - a
Meeting 9    pemrograman shell - a Meeting 9    pemrograman shell - a
Meeting 9 pemrograman shell - a
 
Flowchart
FlowchartFlowchart
Flowchart
 
Build Your First Web App.pdf
Build Your First Web App.pdfBuild Your First Web App.pdf
Build Your First Web App.pdf
 
PROGRESS DEV - Basic Laravel 5.3 #1
PROGRESS DEV - Basic Laravel 5.3 #1PROGRESS DEV - Basic Laravel 5.3 #1
PROGRESS DEV - Basic Laravel 5.3 #1
 
Algoritma dan pemrograman
Algoritma dan pemrogramanAlgoritma dan pemrograman
Algoritma dan pemrograman
 
Optimize php application in high traffic environment
Optimize php application in high traffic environmentOptimize php application in high traffic environment
Optimize php application in high traffic environment
 

PSR

  • 1. Mari Memahami PSR oleh Mizan Rizqia
  • 2. Latar Belakang ● PHP bahasa yg berkembang ● PHP tidak standar ● PHP tidak ada spesifikasi yg nyata
  • 3. Latar Belakang PHP 5.4 ● OOP Lengkap ● banyak fungsi baru
  • 5. Masalah ● Banyak PHP framework ● Haruskah belajar semua PHP framework? ● Apa framework yang bagus? ● Apakah harus terpaku 1 PHP framework?
  • 6. PHP-FIG PHP Framework Interop Group
  • 7. Misi PHP-FIG Menemukan cara untuk membuat framework-framework PHP mampu bekerja bersama-sama
  • 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. Hasil PHP-FIG PHP Standards Recommendation (PSR)
  • 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.
  • 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. PSR-0 Contoh Implementasi ● http://laravel.io/bin/yGE6D
  • 15. PSR-1 Basic Coding Standard
  • 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.
  • 26. PSR-2 Contoh Implementasi http://laravel.io/bin/Mk5dJ
  • 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
  • 39. > phpcs --standard=PSR2 *.php https://github.com/squizlabs/PHP_CodeSniffer
  • 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.
  • 43.
  • 44.
  • 46. { “require”: { “psr/log”: “dev-master” } }
  • 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.
  • 52. 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
  • 53. Matur Sembah Nuwun Thank you Mizan Rizqia baobaz@tlab.co.id 081806406692 @mizanrizqia /mizanr