Hey,
ik kwam op de PHP5 pagina __call tegen.
Bij het commentaar stond de volgende functie, die vrij handig is wanneer je erg veel get functies gebruikt in een class:
Ik wilde graag dat hij ook set functies ondersteunde, dus ik heb er het volgende van gemaakt:
Hij werkt nu wel, maar ik weet niet of het nu wel veilig is e.d... daar heb ik te weinig inzicht in __call en PHP5 voor, misschien dat jullie zien of hier iets mis mee is?
ik kwam op de PHP5 pagina __call tegen.
Bij het commentaar stond de volgende functie, die vrij handig is wanneer je erg veel get functies gebruikt in een class:
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
| ## PORTABLE: use this __call function in any class function __call($val, $x) { # see if they're calling a getter method - and try to guess the variable requested if(substr($val, 0, 4) == 'get_') { $varname = substr($val, 4); } elseif(substr($val, 0, 3) == 'get') { $varname = substr($val, 3); } else { die("method $val does not exist\n"); } # now see if that variable exists: foreach($this as $class_var=>$class_var_value) { if(strtolower($class_var) == strtolower($varname)) { return $class_var_value; } } return false; } |
Ik wilde graag dat hij ook set functies ondersteunde, dus ik heb er het volgende van gemaakt:
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
| ## PORTABLE: use this __call function in any class public function __call($val, $x) { if(substr($val, 0, 3) == 'get') { $varname = substr($val, 3); # now see if that variable exists: foreach($this as $class_var=>$class_var_value) { if(strtolower($class_var) == strtolower($varname)) { return $class_var_value; } } } elseif(substr($val, 0, 3) == 'set') { $varname = substr($val, 3); foreach($this as $class_var=>$class_var_value) { if(strtolower($class_var) == strtolower($varname)) { $class_var = $x[0]; } } } else { die("method $val does not exist\n"); } return false; } |
Hij werkt nu wel, maar ik weet niet of het nu wel veilig is e.d... daar heb ik te weinig inzicht in __call en PHP5 voor, misschien dat jullie zien of hier iets mis mee is?