-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy path04-magicke-promenne.php
93 lines (73 loc) · 2.38 KB
/
04-magicke-promenne.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
<?php
/**
* Class Trida - ukázková třída s magickými metodami pro přístup k proměnným
*/
class Trida{
public $a = 'A';
protected $b = 'B';
private $c = 'C';
private $data=[];
/**
* Funkce volaná v případě čtení neexistující či nepřístupné property
* @param string $jmenoPromenne
* @return mixed
*/
public function __get($jmenoPromenne){
echo 'cteni property '.$jmenoPromenne.PHP_EOL;//výpisy pomocí echo jsou tu jen pro účel výuky, v reálném kódu byste samozřejmě jen vrátili danou hodnotu
if (property_exists($this,$jmenoPromenne)){//metoda property_exists umí zjistit, jestli je v daném objektu definována příslušná proměnná (property)
return $this->$jmenoPromenne;
}elseif(isset($this->data[$jmenoPromenne])){
return $this->data[$jmenoPromenne];
}
return null;
}
/**
* Funkce volaná v případě přiřazování hodnoty do neexistující či nepřístupné property
* @param string $jmenoPromenne
* @param $hodnota
*/
public function __set($jmenoPromenne, $hodnota){
echo 'zapis property '.$jmenoPromenne.PHP_EOL;
var_dump($hodnota);
if (property_exists($this,$jmenoPromenne)){
$this->$jmenoPromenne=$hodnota;
}else{
$this->data[$jmenoPromenne]=$hodnota;
}
}
/**
* @param string $jmenoPromenne
* @return bool
*/
public function __isset($jmenoPromenne){
echo 'kontrola isset na property '.$jmenoPromenne.PHP_EOL;
return property_exists($this,$jmenoPromenne) || isset($this->data[$jmenoPromenne]);
}
/**
* @param string $jmenoPromenne
*/
public function __unset($jmenoPromenne){
echo 'usset na property '.$jmenoPromenne.PHP_EOL;
if(property_exists($this,$jmenoPromenne)) {
unset($this->$jmenoPromenne);
}elseif(isset($this->data[$jmenoPromenne])){
unset($this->data[$jmenoPromenne]);
}
}
}
$objekt = new Trida();
echo PHP_EOL.'--'.PHP_EOL;
$objekt->a = 'testA';
$objekt->b = 'testB';
$objekt->c = 'testC';
$objekt->d = 'testD';
echo PHP_EOL.'--'.PHP_EOL;
$x = $objekt->a;
$x = $objekt->b;
$x = $objekt->c;
$x = $objekt->d;
echo PHP_EOL.'--'.PHP_EOL;
var_dump(isset($objekt->d));
var_dump(isset($objekt->e));
echo PHP_EOL.'--'.PHP_EOL;
unset($objekt->x);