微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

像PHP中的重载一样?

我想完成这样的事情:调用一个方法,说“转”,然后对不同的数据类型进行不同的“转向”,例如,用“螺丝刀”对象调用“turn”/ param使用“turnScrewdriver” “方法,用”steeringWheel“对象/ param调用”turn“使用”turnSteeringWheel“方法等等 – 正在做不同的事情,但它们都被称为”转向“.

我想实现这一点,以便调用代码不必担心涉及的类型.在这个例子中,“转弯”应该足以“转动”“螺丝刀”,“steeringWheel”或任何可能需要“转动”的东西.

在C中我会通过重载执行此操作 – 并且C会根据数据类型/签名对事物进行排序 – 但这在PHP中不起作用.

有关我应该从哪里开始的任何建议? switch语句很明显,但我认为必须有一个(更优雅的)OO解决方案.没有?

TIA

解决方法:

我读过davethegr8的解决方案,但似乎可以用更强的打字做同样的事情:

<?PHP

interface Turnable
{
  public function turn();
}

class Screwdriver implements Turnable
{
  public function turn() {
    print "to turning sir!\n";
  }
}

class SteeringWheel implements Turnable
{
  public function turn() {
    print "to everything, turn, turn turn!\n";
  }
}

function turn(Turnable $object) {
  $object->turn();
}

$driver = new Screwdriver();
turn($driver);

$wheel = new SteeringWheel();
turn($wheel);

$obj = new Object(); // any object that does not implement Turnable
turn($object); // ERROR!

PHP允许您对参数使用类型提示,类型提示可以是接口名称而不是类名.所以你可以肯定,如果$object实现了Turnable接口,那么它必须有turn()方法.每个实现Turnable的类都可以自己完成转换.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐