我只是给你超级懒惰的选择:
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,或者您猜出getPrice_2为两个参数.这对于大多数用例来说已经足够了.当然,您可以组合两种替代方法,或者通过搜索所有替代的实际方法名称来使其变得更加聪明.
如果你想保持你的API漂亮和用户友好的实现这样复杂的解决方法是可以接受的.非常好