PSR adalah singkatan dari PHP Standard Recommendation. Ini adalah kumpulan standar coding yang dibuat oleh organisasi PHP-FIG (PHP Framework Interop Group) untuk mendorong interoperabilitas antar framework dan library di dunia PHP. Berikut PSR yang sering digunakan :
Kode PSR | Nama Standar | Fungsi Singkat |
---|---|---|
PSR-1 | Basic Coding Standard | Aturan dasar penulisan kode (penamaan class, file, dll) |
PSR-2 | Coding Style Guide | Gaya penulisan kode yang rapi dan konsisten |
PSR-4 | Autoloading Standard | Standar cara memanggil class otomatis berdasarkan struktur folder |
PSR-3 | Logger Interface | Standar untuk sistem logging |
PSR-7 | HTTP Message Interface | Struktur standar untuk permintaan dan respons HTTP |
PSR-12 | Extended Coding Style Guide | Pengembangan dari PSR-2 dengan aturan yang lebih lengkap |
Tujuan PSR adalah agar kode dari berbagai framework (seperti Laravel, Symfony, CodeIgniter, dll) bisa bekerja sama atau saling dipahami dengan mudah.
Berikut adalah contoh-contoh semua PSR populer yang sering digunakan dalam pengembangan aplikasi PHP modern. Kita akan membahas yang paling relevan: PSR-1, PSR-2, PSR-4, PSR-3, PSR-7, dan PSR-12. (PSR lainnya lebih teknis atau jarang digunakan secara langsung.)
Daftar Isi :
✅ PSR-1: Basic Coding Standard
Tujuan: Menstandarisasi penamaan class, file, dan penggunaan namespace.
<?php
namespace App\Models;
class UserModel {
public function getData() {
return 'Data pengguna';
}
}
- Class harus
PascalCase
- File harus sama dengan nama class:
UserModel.php
- Gunakan
namespace
✅ PSR-2: Coding Style Guide
Tujuan: Standar penulisan kode agar rapi dan konsisten.
<?php
namespace App\Controllers;
class UserController extends BaseController
{
public function index()
{
$data = ['title' => 'User Page'];
return view('user/index', $data);
}
}
- Kurung kurawal
{
berada di baris baru - Indentasi 4 spasi (bukan tab)
- Spasi setelah koma dan di sekitar operator
=
Catatan: PSR-2 sekarang sudah diperbarui oleh PSR-12.
✅ PSR-4: Autoloading Standard
Tujuan: Class bisa dipanggil otomatis berdasarkan namespace dan struktur folder.
// File: app/Libraries/MyLibrary.php
namespace App\Libraries;
class MyLibrary {
public function hello() {
return "Hello World!";
}
}
Jika kamu pakai Composer, composer.json
harus ada ini:
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
Dengan begitu, kamu bisa langsung pakai class ini tanpa require
:
use App\Libraries\MyLibrary;
$lib = new MyLibrary();
echo $lib->hello();
✅ PSR-3: Logger Interface
Tujuan: Standar untuk sistem logging (misalnya log error atau aktivitas).
use Psr\Log\LoggerInterface;
class UserService {
protected $logger;
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
public function login($user) {
$this->logger->info("User login: " . $user);
}
}
Library seperti Monolog sudah menerapkan PSR-3.
✅ PSR-7: HTTP Message Interface
Tujuan: Standar cara menangani request & response HTTP, terutama untuk framework atau middleware.
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
function handleRequest(ServerRequestInterface $request, ResponseInterface $response)
{
$name = $request->getQueryParams()['name'] ?? 'Guest';
$response->getBody()->write("Hello, $name!");
return $response;
}
Framework seperti Slim, Laravel, atau Symfony menggunakan standar ini untuk HTTP message handling.
✅ PSR-12: Extended Coding Style
PSR-12 adalah versi lanjutan dan lebih ketat dari PSR-2.
<?php
declare(strict_types=1);
namespace App\Services;
use App\Models\User;
use Exception;
class AuthService
{
public function login(string $email, string $password): bool
{
if (empty($email) || empty($password)) {
throw new Exception('Email dan Password wajib diisi.');
}
// logic login...
return true;
}
}
Beberapa poin tambahan dari PSR-12:
- Harus pakai
declare(strict_types=1);
di baris pertama - Setiap
use
hanya untuk 1 baris (tidak digabung) - Return type pakai
: bool
,: string
, dll
Kalau kamu pakai CodeIgniter 4 atau framework modern lain, kamu secara otomatis akan terpapar dan terbantu dengan PSR, terutama PSR-4, PSR-12, dan PSR-3.
Selamat mencoba!