// 参数类型不同的重载class D { function __call($name, $args){ if($name == 'foo'){ if(is_string($args[0])){ $this->fooString($args[0]); }else { $this->fooInt($args[0]); } } } private function fooInt(int $a){ echo $a . ' is Int', PHP_EOL; } private function fooString(string $a){ echo $a . ' is String', PHP_EOL; }}$d = new D();$d->foo(1);$d->foo('1');
不管怎么说,用上述方法实现的方法重载都非常麻烦,因为会让某一个方法或者魔术方法非常重,它需要成为一个控制器来根据参数对内部的方法进行调度 。更多的情况下,我们应该还是使用不同的方法名然后抽象公共的部分提取成独立的私有内部方法来实现不同方法名的“重载” 。毕竟不同的语言还是要掌握它们不同的个性,并且根据这些个性灵活地运用在我们的项目中 。
测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/PHP%E4%B8%AD%E7%9A%84%E2%80%9C%E9%87%8D%E8%BD%BD%E2%80%9D%E6%98%AF%E4%B8%AA%E5%95%A5%EF%BC%9F.php
参考文档: https://www.php.net/manual/zh/language.oop5.overloading.php#77843
推荐阅读
- 太极拳老年人不要“练” 零基础练太极拳的要领
- 比亚迪|一车碰两瓷!老头乐版“比亚迪海豚”亮相 车名让小鹏汽车无语
- 电动车|“变形金刚”是真的!林肯纯电概念车发布:擎天柱见了都想换
- 锻炼多长时间能减肥
- 跑步多少时间才能减肥
- 招聘|薪资过万招人也难?3大行业陷用工“瓶颈”!80后90后都去哪了?
- 水煮蛋|若将50cm“仙女管”塞入体内,最后会怎么样?答案和你想的一样吗
- 网友热议|女生晒成为“刘畊宏女孩”第3天 下楼双腿不受控:走姿让网友笑趴
- 蔬菜皇冠是指什么蔬菜?
- 金蝉子和如来佛祖是什么关系 金蝉子在佛教中的地位