Я просто даю вам супер-ленивую опцию:
function __call($name, $args) {
$name = $name . "_" . implode("_", array_map("gettype", $args)));
return call_user_func_array(array($this, $name), $args);
}
Это, например, вызовет реальное имя функции getPrice_string_array
для двух параметров этого типа.Это то, что языки с реальной поддержкой перегрузки сигнатур методов будут делать за кулисами.
Еще более ленивым будет просто считать аргументы:
function __callStatic($name, $args) {
$name = $name . "_" . count($args);
return call_user_func_array(array($this, $name), $args);
}
Это вызовет getPrice_1
для 1 аргументаили getPrice_2
для, как вы уже догадались, двух аргументов.Это может быть уже достаточно для большинства случаев использования.Конечно, вы можете комбинировать обе альтернативы или сделать их более умными путем поиска всех альтернативных имен реальных методов.
Если вы хотите, чтобы ваш API был красивым и удобным, реализация таких сложных обходных путей приемлема.Очень сильно.