-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetterSetter.php
40 lines (37 loc) · 1.1 KB
/
GetterSetter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
/**
* Menyediakan fasilitas get* dan set* untuk semua atribut private secara otomatis (pakai __call)
*
* Convention:
* - protected $asdf akan mendapat getAsdf() dan setAsdf()
* - protected $asdfJkl akan mendapat getAsdfJkl() dan setAsdfJkl()
* - protected $_asdf akan mendapat get_asdf() dan set_asdf()
* - protected $_asdf_jkl akan mendapat get_asdf_jkl() dan set_asdf_jkl()
*/
abstract class GetterSetter {
public function __call($name, $params) {
// $name nama method harus > 3 karakter "get*" atau "set*"
if (!preg_match('/^[gs]et/', $name)) return;
$refl = new ReflectionClass($this);
$prop = substr($name, 3);
$prop[0] = strtolower($prop[0]);
if ($reflprop = $refl->getProperty($prop)) {
if (strpos($name, 'get') === 0) {
return $this->$prop;
} else if (strpos($name, 'set') === 0) {
$this->$prop = $params[0];
}
}
}
}
// TEST RUN //
class A extends GetterSetter {
protected $satuSapi;
protected $_dua_sapi;
}
$a = new A();
$a->setSatuSapi('dua puluh ribu');
$a->set_dua_sapi('tiga puluh lima ribu');
print_r($a);
echo $a->getSatuSapi();
echo $a->get_dua_sapi();