像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的类都可以自己完成转换.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...