DEV Community

Cover image for Pakai Atribut di PHP Nggak Perlu Bayar Royalti
ASTOMO PANCORO PUTRO
ASTOMO PANCORO PUTRO

Posted on

Pakai Atribut di PHP Nggak Perlu Bayar Royalti

Perkembangan bahasa pemrograman PHP sedemikian pesat nya. Di rilis terbaru nya versi 8.*, bahasa ini menawarkan syntax baru yang dapat digunakan untuk memproses class pada saat runtime.

Mengenal Attribute

Attribute adalah sebuah keterangan (annotation) yang dapat diproses oleh PHP dan dapat memengaruhi class dan komponennya. Untuk menuliskan attribute syntax nya sbb:

#[NamaAttribute]

Berikut ini beberapa contoh penempatan annotation pada suatu class

<?php

#[ClassAttribute]
class MyClass {

#[PropertyAttribute]
private $my_property;

#[MethodAttribute]
public function myMethod()
{ 
}

private function myJob(#[ParamAttribute] $request)
{
}

}
Enter fullscreen mode Exit fullscreen mode

Penamaan pada attribute ini mengikuti aturan fully qualified name di PHP, yakni memerlukan namespace. Dengan sendirinya wujud attribute adalah sebuah class.

Mendeklarasikan Attribute

Untuk mendeklarasikan attribute, sama saja seperti mendeklarasikan class di PHP. Namun perlu ditambahkan annotation #[Attribute]. Berikut ini contoh nya.

<?php

namespace MyAttributes;

use Attribute;

#[Attribute]
class MethodAttribute {
public function __construct($value)
{
}
}
Enter fullscreen mode Exit fullscreen mode

Sedangkan untuk menambahkan attribute, maka annotation harus ditempatkan di bagian class yang sesuai.

<?php

use MyAttributes\MethodAttribute;

class MyClass {
#[MethodAttribute("hello")]
public function myMethod(){
}
}

Enter fullscreen mode Exit fullscreen mode

Annotation bisa menerima argumen jika saat deklarasi ditambahkan konstruktor. Nantinya nilai dari argumen ini bisa dipanggil saat diproses.

Memproses Attribute

PHP menyediakan built in interface bernama Reflection yang bisa digunakan untuk menedeteksi annotation yang ditambahkan pada class tersebut. Interface ini terdiri dari beberapa class sesuai dengan bagian class yang hendak dimodifikasi. Class yang tersedia antara lain sbb.

ReflectionClass -- untuk memproses class
ReflectionProperty -- untuk memproses property
ReflectionMethod -- untuk memproses method
ReflectionParameter -- untuk memproses parameter

Untuk mendeteksi annotation, tiap-tiap class tersebut memiliki method getAttributes yang mengembalikan array dari semua annotation yang terdeteksi. Sebagai catatan, tiap komponen class bisa memiliki lebih dari satu annotation. Array ini terdiri atas class ReflectionAttribute. Class ini juga memiliki method yang bisa digunakan untuk berinteraksi dengan annotation yang dipilih. Berikut ini contoh memproses annotation.

<?php
use MyAttribute\MethodAttribute;
use MyClass;

function processAttribute(){
  $method = new ReflectionMethod(MyClass::class,"myMethod");
  $attr = $method->getAttributes(MethodAttribute::class);
  foreach($attr as $item){
    //panggil attribute yang terdeteksi di sini
    $attr_class = $item->newInstance();
  }
  //panggil class di sini
  $class = new ReflectionClass(MyClass::class);
  $main_class = $class->newInstance();
}
Enter fullscreen mode Exit fullscreen mode

Contoh Kode Pemanfaatan Reflection dan Annotation

Gbr 1. Deklarasi Attribute
Gbr 1. Deklarasi Attribute

Gbr 2. Annotating Class
Gbr 2. Annotating Class

Gbr 3. Parsing Attribute (gunakan require jika tidak autoloading class)
Gbr 3. Parsing Attribute (gunakan require jika tidak autoloading class)

Gbr 4. Hasil akhir
Gbr 4. Hasil akhir

Top comments (0)