-
Notifications
You must be signed in to change notification settings - Fork 0
/
(7.1)Overloading_Produk.php
135 lines (101 loc) · 3.78 KB
/
(7.1)Overloading_Produk.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/*
Overloading adalah untuk membuat property dan juga method.
Ketika membuat property itu akan menghasilkan property yang visibility typenya itu berupa protected dan juga private
- Dalam PHP ada empat properti overloading, yaitu:
public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )
Keterangan :
(untuk membuat magic methods ini method functionya harus public tidak boleh private atau protected ataupun static)
__set() dijalankan ketika menulis data pada properti yang tidak dapat diakses.
__get() digunakan untuk membaca data dari properti yang tidak dapat diakses.
__isset() dipicu dengan memanggil method isset() atau empty() pada properti yang tidak dapat diakses.
__unset() dipanggil saat method unset() digunakan pada properti yang tidak dapat diakses.
Ketika membuat method itu akan menghasilkan method yang visibility typenya itu berupa public protected dan juga private
Method Overloading
- Dalam PHP ada dua method overloading, yaitu :
public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )
Keterangan :
__call() dipicu ketika memanggil method yang tidak dapat diakses didalam object
__callStatic() dipicu ketika memanggil method yang tidak dapat diakses didalam static
*/
// OVERLOADING PROPERTY
class PropertyTest
{
/** Location for overloaded data. */
private $data = array();
/** Overloading not used on declared properties. Dalam mendeklarasikan overloading dalam type visibility
* public itu tidak akan bisa.
*/
public $declared = 1;
/** Overloading only used on this when accessed outside the class. */
private $hidden = 2;
public function __set($name, $value)
{
echo "Setting " . $name . " to " . $value . "\n";
$this->data[$name] = $value;
}
public function __get($name)
{
echo "Getting " . $name . "\n";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
trigger_error("Undefined property via __get(): " . $name . " in " . $trace[0]['file'] . " on line " . $trace[0]['line'], E_USER_NOTICE);
return null;
}
public function __isset($name)
{
echo "Is " . $name . "set?\n";
return isset($this->data[$name]);
}
public function __unset($name)
{
echo "Unsetting " . $name . "\n";
unset($this->data[$name]);
}
/** Not a magic method, just here for example. */
public function getHidden()
{
return $this->hidden;
}
}
echo "<pre>\n";
$obj = new PropertyTest;
$obj->a = 2;
$obj->b = 100;
echo "\n\n";
echo $obj->a . "\n";
$hasil = $obj->b * $obj->a;
echo ($hasil) . "\n\n";
var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "\n";
echo $obj->declared . "\n\n";
echo "Let's experiment with the private property named 'hidden':\n";
echo "Privates are visible inside the class, so __get() not used...\n";
echo $obj->getHidden() . "\n";
echo "Privates not visible outside of class, so __get() is used...\n";
echo $obj->hidden . "\n";
class MethodTest
{
public function __call($name, $arguments)
{
// Note: value dari $name adalah case sensitive.
echo "Memanggil method '$name' " . $arguments[0] . "<br/>";
}
public static function __callStatic($name, $arguments)
{
// Note: value dari $name adalah case sensitive.
echo "Memanggil method '$name' "
. implode(', ', $arguments) . "<br/>";
}
}
$obj = new MethodTest;
$obj->Jalankan('->pada konteks Object', ['tes', 'tes']);
MethodTest::Jalankan('->pada konteks Static');