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)
{
}
}
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)
{
}
}
Sedangkan untuk menambahkan attribute, maka annotation harus ditempatkan di bagian class yang sesuai.
<?php
use MyAttributes\MethodAttribute;
class MyClass {
#[MethodAttribute("hello")]
public function myMethod(){
}
}
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();
}
Contoh Kode Pemanfaatan Reflection dan Annotation
Gbr 3. Parsing Attribute (gunakan require jika tidak autoloading class)
Top comments (0)