Penulisan Properti melalui Magic dalam OOP di PHP
Metode ajaib __set dipanggil
saat ada upaya untuk mengubah nilai properti yang tidak ada
atau tersembunyi. Sebagai parameternya,
ia menerima nama properti dan nilai yang
ingin diberikan padanya.
Mari kita lihat pada contoh praktis.
Misalkan kita diberikan kelas Test seperti berikut:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Mari kita buat metode ajaib
__set di kelas ini, yang dengan fungsi
var_dump akan menampilkan nama properti
yang diakses, dan nilai
yang ingin diatur untuk properti tersebut:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Mari kita uji kerja kelas kita:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump dari metode __set akan menampilkan 'prop value'
?>
Sekarang mari kita atur nilai
properti, yang namanya disimpan dalam variabel
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // mengatur nilai
}
}
?>
Sekarang kita bisa menulis ke properti privat dari luar kelas:
<?php
$test = new Test;
$test->prop1 = 1; // menulis 1
$test->prop2 = 2; // menulis 2
?>
Kita bisa menulis, namun, untuk memeriksa apakah sudah tertulis sesuatu di sana - tidak bisa, karena propertinya privat.
Kita bisa membuat getter untuk properti ini atau
cukup menggunakan metode ajaib
__get. Mari gunakan opsi kedua:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Getter ajaib untuk properti:
public function __get($property)
{
return $this->$property;
}
}
?>
Sekarang kita bisa menguji kerja kelas kita. Mari kita uji:
<?php
$test = new Test;
$test->prop1 = 1; // menulis 1
$test->prop2 = 2; // menulis 2
echo $test->prop1; // akan menampilkan 1
echo $test->prop2; // akan menampilkan 2
?>
Sebenarnya, tentu saja, tidak seharusnya mengizinkan siapa pun menulis ke properti privat, jika tidak, inti dari properti privat itu sendiri akan hilang (lebih mudah menjadikannya publik saja).
Oleh karena itu, metode ini sebaiknya hanya diterapkan ketika benar-benar ada kebutuhan. Dalam pelajaran berikutnya, kita akan membahas contoh-contoh penerapan yang tepat.