Menulis Sifat melalui Sihir dalam OOP dalam PHP
Kaedah ajaib __set dipanggil
apabila cuba mengubah nilai sifat yang tidak wujud
atau tersembunyi. Ia menerima nama sifat dan nilai
yang cuba diberikan kepadanya sebagai parameter.
Mari kita lihat contoh praktikal.
Katakan kita mempunyai kelas Test seperti berikut:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Mari buat kaedah ajaib
__set dalam kelas ini, yang menggunakan fungsi
var_dump untuk memaparkan nama sifat
yang diakses, dan nilai
yang cuba ditetapkan untuk sifat tersebut:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Mari kita uji kerja kelas kami:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump dari kaedah __set akan paparkan 'prop value'
?>
Sekarang mari kita tetapkan nilai
kepada sifat yang namanya disimpan dalam pembolehubah
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // menetapkan nilai
}
}
?>
Sekarang kita boleh menulis kepada sifat persendirian dari luar kelas:
<?php
$test = new Test;
$test->prop1 = 1; // tulis 1
$test->prop2 = 2; // tulis 2
?>
Kita boleh menulis, namun, untuk menyemak sama ada something telah ditulis ke sana - tidak boleh, kerana sifat tersebut adalah persendirian.
Kita boleh membuat getter untuk sifat-sifat ini atau
hanya menggunakan kaedah ajaib
__get. Mari gunakan pilihan kedua:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Getter ajaib untuk sifat:
public function __get($property)
{
return $this->$property;
}
}
?>
Sekarang barulah kita boleh menguji kerja kelas kami. Mari uji:
<?php
$test = new Test;
$test->prop1 = 1; // tulis 1
$test->prop2 = 2; // tulis 2
echo $test->prop1; // akan paparkan 1
echo $test->prop2; // akan paparkan 2
?>
Sebenarnya, sudah tentu, tidak wajar membenarkan sesiapa sahaja menulis kepada sifat persendirian, jika tidak, intipati sifat persendirian ini akan hilang (lebih mudah menjadikannya awam dan selesai).
Oleh itu, kaedah ini hanya patut digunakan apabila terdapat keperluan sebenar. Dalam pelajaran seterusnya, kita akan melihat contoh aplikasi yang berjaya.