尝试使用PHP 实现方法重载(不要与PHP手册中的重载定义混淆),要进行明确的权衡是不容易的,因为PHP的性质,您必须在内部提供一种方法和/ if或switch语句来提供重载,它会创建在长方法中难以阅读的过程代码。
在PHP中有方法重载是否有任何优势,可以通过其他任何方式实现吗?
class MyClass {
public function doMany($input) {
if (is_array($input)) {
...
} else if (is_float($input)) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
与传统方法
class MyClass {
public function doArray(array $input) {
...
}
public function doFloat(float $input) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
传统方法是:
class Aclass {
public function doStuff(int $a) {
// return other stuff
}
public function doStuff(float $a) {
// return other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,相同的函数名称只是参数的类型不同。
如果要在php中模拟重载,通常第一种方法是使用该方法。通常来说,由于PHP是松散类型的,因此您实际上并不需要在PHP中进行重载,并且根据定义,您实际上并不能进行重载。
回答您的问题。如果您确实需要超载,那么您的第一种方法似乎合适。使用开关使其更具可读性。
免责声明:尽管您可以这样做,但我不建议这样做。哎呀,如果您愿意,您几乎可以做任何事情。这并不意味着你应该。