PSR 4 – Autoload

http://www.php-fig.org/psr/psr-4/

Perhatikan keyword ‘harus’, ‘tidak boleh’, ‘seharusnya’, ‘disarankan’, ‘dibolehkan’, ‘mungkin’.

1. Overview

Dokumen PSR ini mendeskripsikan spesifikasi untuk autoloading class dari file path. PSR ini bisa digabungkan dengan spesifikasi autoloading yang lain, termasuk PSR0. PSR ini juga mendeskripsikan dimana sebuah file harus disimpan yang akan di autoload sesuai dengan spesifikasinya.

2. Specification

  • Term “class” merefer ke class, interfaces, traits dan struktur mirip lainnya.
  • Nama “fully qualified class” memiliki bentuk sebagai berikut:
    • \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    • Nama “fully qualified class” harus memiliki namespace top level, yang dikenal juga sebagai “vendor namespace”.
    • Nama “fully qualified class” boleh memiliki satu atau lebih sub namespace.
    • Nama “fully qualified class” harus memiliki akhiran nama class.
    • Underscore tidak memiliki arti khusus di setiap bagian dari nama “fully qualified class”.
    • Karakter alfabet di dalam nama “fully qualified class” boleh mengandung kombinasi huruf kecil dan huruf besar.
    • Semua nama class harus direfer sesuai casenya (case-sensitive).
  • Ketika me-load sebuah file yang berkorespondensi dengan nama “fully qualified class”…
    • Sebuah serial bersambung dari satu atau lebih namespace awal dan sub namespace, tidak termasuk separator namespace awal, di dalam nama “fully qualified class” (namespace prefix) berkorespondensi dengan setidaknya satu “base directory”.
    • Sub namespace yang bersambung setelah “namespace prefix” berkorespondensi dengan sub direktori didalam “base directory”, dimana separator namespace berlaku sebagai separator direktori. Nama sub direktori harus sesuai dengan “case” sub namespace.
    • Nama class berkorespondensi dengan nama file diakhiri dengan .php. Nama file harus sesuai dengan “case” dari nama class.
  • Implementasi autloader tidak boleh menghasilkan exception, tidak boleh menghasilkan error di level apapun, dan seharusnya tidak mengembalikan sebuah value.

3. Examples

Tabel di bawah menampilkan korespondensi file path untuk sebuah nama “fully qualified class”, namespace prefix, dan base directory.

Fully Qualified Class Name Namespace Prefix Base Directory Resulting File
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Sebagai contoh implementasi dari autoloader yang mengikuti spesifikasi, lihat contoh file. https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

Contoh implementasi tidak boleh dianggap sebagai bagian dari spesifikasi dan mungkin berubah kapan saja.

 

Credit to: Yusuf Irwandi

Leave a Reply

Your email address will not be published. Required fields are marked *