Tags

, , ,

Salah satu hal keren yang diperkenalkan oleh Yii adalah behavior. Kenapa saya bilang keren. Itu karena Yii memperkenalkan konsep behavior ini beberapa tahun lebih dulu dari pada traitnya PHP. Yaitu sejak Yii masih versi 1.

Behavior, dikenal juga sebagai mixin, adalah class turunan dari yii\base\Behavior yang dapat memperkaya class component yang sudah ada tanpa harus membuat turunannya. Attaching behavior pada component berarti menyisipkan method dan properti dari behavior pada component tersebut. Selain itu, behavior juga dapat merespon event yang ditriger oleh component.

Contoh Behavior

// definisi
namespace app\components;

class MyBehavior extends \yii\base\Behavior
{
    public $behaviorProp = 'test';

// penggunaan
$component->attachBehavior('myBehavior', 'app\components\MyBehavior');

echo $component->behaviorProp; // mengakses property MyBehavior

Behavior sendiri mirip dengan Trait dalam hal kemampuan untuk meng-inject method dan properti-nya ke dalam class utama. Walau demikian, keduanya memiliki beberapa perbedaan yang masing-masing memiliki kelebihan dan kekurangan.

Kelebihan behavior dibanding trait:

  • Behavior adalah class. Sebagaimana classclass lain, behavior suport terhadap inheritance. Sedangkan trait tidak support inheritance.
  • Ini yang menarik dan alasan kuat kenapa saya mempertahankan behavior. Behavior dapat diattach secara dinamik pada component tanpa harus memodifikasi code aslinya. Sedangkan trait, mau tidak mau harus mengubah kode asli dari component tersebut.
  • Behavior dapat dikonfigurasi sedangkan trait tidak.
  • Behavior dapat merespon event yang ditriger oleh component
  • Alasan menarik berikutnya. Jika ada nama yg konflik dari 2 atau lebih behavior, aplikasi akan tetap jalan tanpa error dengan cara memprioritaskan behavior yg pertama diattach. Sedangkan jika menggunakan trait, otomatis akan muncul syntax error 😀

Sedangkan kelebihan trait dibanding behavior antara lain:

  • Secara teori, trait lebih efisien dibanding behavior karena trait dicompile dalam component.
  • Trait juga akan terbaca dengan jelas di IDE. Dalam hal ini, autocompletion akan jalan dengan baik pada trait.
  • Ada gosip yang belum dikonfirmasi kebenarannya bahwa mungkin saja behavior akan ditinggalkan di Yii versi 2.1 😀

Contoh behavior dan trait yang bisa dipakai dapat ditemukan di mdmsoft/yii2-ar-behaviors dan mdmsoft/yii2-format-converter

Advertisements