Jeśli połączenie zostanie dokonane do metody niezdefiniowanej w klasie, magiczna metoda może __call przechwycić rozmowę, więc mogłem poradzić sobie z sytuacją jak widzę pasuje: http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methodsCzy istnieje funkcja taka jak magiczna metoda __call() dla globalnego zasięgu w php?
Czy istnieje jakiś mechanizm przewidziany w php przy czym ja może zrobić to samo z funkcjami o zasięgu globalnym. Punktem najlepiej ilustruje z kodem:
<?php
function return_some_array(){
$a = array();
//Do stuff to array
return array();
}
// Now i call the function like so:
$give_me_array = return_some_array();
// But sometimes I want the array to not contain zeroes, nulls etc.
// so I call:
$give_me_array_filtered = return_some_array_filtered();
// But i haven't defined return_some_array_filtered() anywhere.
// Instead I would like to do something like so:
function __magic_call($function_name_passed_automatically){
preg_match('/(.*)_filtered$/', $function_name_passed_automatically, $matches);
$function_name_that_i_defined_earlier_called_return_some_array = $matches[1];
if($matches){
$result = call_user_func($function_name_that_i_defined_earlier_called_return_some_array);
$filtered = array_filter($result);
return $filtered;
}
}
//So now, I could call return_some_other_array_filtered() and it would work provided I had defined return_some_other_array().
//Or even Donkey_filtered() would work, provided I had defined Donkey() somewhere.
?>
Czy to w ogóle możliwe?
Dzięki! Myślę, że spróbuję. –
@ V-A To oczywiście dość marnotrawny i niepotrzebnie hackowski sposób robienia rzeczy. Powinieneś definiować i wywoływać swoje funkcje w normalny sposób. – deceze
Inna uwaga: czy uważasz, że można to zaimplementować jako rozszerzenie? Wyobrażam sobie, że byłoby to dość proste? –