Alias Path dan Namespace

Yii menggunakan alias secara luas. Alias path dikaitkan dengan direktori atau path file. Ditetapkan dalam sintaks dot (titik), mirip dengan format namespace yang diadopsi secara luas:

RootAlias.path.ke.target

dengan RootAlias sebagai alias dari beberapa direktori yang sudah ada.

Dengan memanggil YiiBase::setPathOfAlias(), sebuah alias dapat diterjemahkan ke path yang bersangkutan. Misalnya, system.web.CController akan diterjemahkan sebagai yii/framework/web/CController.

Kita juga dapat menggunakan YiiBase::setPathOfAlias() untuk mendefinisikan alias path root yang baru.

1. Alias Root

Untuk kemudahan, Yii mendefinisikan beberapa alias root berikut :

  • system: merujuk pada direktori Yii framework;
  • zii : merujuk pada direktori [pustaka Zii] (/doc/guide/extension.use#zii-extensions);
  • application: merujuk pada basis direktori aplikasi;
  • webroot: merujuk pada direktori yang berisi file skrip entri.
  • ext: merujuk ke direktori yang berisi semua extensions|extension pihak ketiga.

Sebagai tambahan, jika suatu aplikasi menggunakan module, maka setiap module akan memiliki root alias yang sudah di-define. Root alias ini memiliki nama yang sama dengan ID module dan merujuk ke base path module. Misalnya, jika sebuah aplikasi menggunakan module yang memiliki ID users, maka sebuah root alias bernama users akan di-define.

2. Mengimpor Kelas

Menggunakan alias, sangat nyaman untuk mengimpor definisi sebuah kelas. Sebagai contoh, jika kita ingin menyertakan definisi kelas CController, kita dapat memanggil seperti berikut:

Yii::import('system.web.CController');

Metode import berbeda dengan include dan require karena metode ini lebih efisien. Definisi kelas yang sedang diimpor sebenarnya tidak disertakan (di-include) sampai ia dirujuk untuk pertama kalinya. Mengimpor namespace yang sama berkali-kali juga lebih cepat daripada include_once dan require_once.

Tip: Ketika merujuk pada kelas yang didefinisikan oleh Yii framework, kita tidak perlu mengimpor atau menyertakannya. Semua kelas inti Yii sudah di-import pada awalnya.

Menggunakan Class Map

Dimulai dari versi 1.1.5, Yii memungkinkan kelas-kelas user di pra-impor melalui sebuah mekanisme pemetaan kelas yang juga digunakan oleh kelas utama Yii. Kelas pra-impor dapat digunakan di mana saja dalam sebuah aplikasi Yii tanpa perlu di-impor atau di-include-kan secara eksplisit. Fitur ini paling berguna untuk sebuah framework atau pustaka yang dibuat di atas Yii.

Untuk melakukan pre-impor sekumpulan kelas, kode berikut ini harus dijalankan terlebih dahulu sebelum CWebApplication::run() dijalankan :

Yii::$classMap=array(
    'ClassName1' => 'path/to/ClassName1.php',
    'ClassName2' => 'path/to/ClassName2.php',
    ......
);

3. Mengimpor Direktori

Kita juga dapat menggunakan sintaks berikut untuk mengimpor seluruh direktori agar file kelas di bawah direktori tersebut secara otomatis disertakan saat diperlukan.

Yii::import('system.web.*');

Selain import, alias juga dipakai di banyak tempat lain untuk merujuk pada kelas. Sebagai contoh, alias dapat dioper ke Yii::createComponent() guna membuat instance kelas terkait, meskipun file kelas tidak disertakan sebelumnya.

4. Namespace

Namespace merujuk pada pengelompokkan logis beberapa nama kelas agar dapat dibedakan dari nama kelas lainnya jika namanya sama. Jangan menyamakan antara alias path dengan namespace. Sebuah alias path dipakai untuk merujuk pada file kelas atau direktori. Alias path tidak ada hubungannya dengan namespace.

Tip: Karena PHP sebelum versi 5.3.0 tidak mendukung namespace secara langsung, Anda tidak dapat membuat instance dari dua kelas yang memiliki nama yang sama dengan definisi yang berbeda. Untuk alasan ini, semua kelas Yii framework diawali dengan huruf 'C' (berarti 'class') agar bisa dibedakan dari kelas yang didefinisikan pengguna. Direkomendasikan bahwa prefiks 'C' khusus dipakai hanya untuk pemakaian Yii framework saja, dan kelas yang didefinisikan-pengguna diawali dengan huruf lainnya.

5. Kelas Ber-Namespace

Sebuah kelas ber-namespace merujuk pada sebuah kelas yang dideklarasikan di dalam sebuah namespace non-global. Misalnya, kelas application\components\GoogleMap dideklarasikan di dalam namespace application\components. Menggunakan kelas ber-namespace memerlukan PHP 5.3.0 atau ke atas.

Mulai dari versi 1.1.5, dimungkinkan untuk menggunakan kelas ber-namespace tanpa perlu meng-include-nya secara eksplisit. Misalnya, kita dapat membuat sebuah instance baru dari application\components\GooleMap tanpa perlu meng-include-kan file kelas koresponden secara eksplisit. Ini memungkinkan dengan meningkatkan mekanisme autoloading kelas.

Untuk bisa melakukan autoload sebuah kelas ber-namespace, namespace harus dinamakan dengan cara yang mirip dengan alias path. Misalnya, sebuah kelas application\components\GoogleMap harus disimpan ke dalam sebuah file yang dapat dialiaskan sebagai application.components.GoogleMap.

$Id: basics.namespace.txt 3086 2011-03-15 00:04:53Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.