类似于PHP中的重载?

类似于PHP中的重载?,php,oop,overloading,Php,Oop,Overloading,我想这样做:调用一个方法,说“turn”,然后对不同的数据类型应用不同的“turn”,例如,使用“螺丝刀”对象/param调用“turn”使用“turnSwitch”方法,使用“steeringWheel”对象/param调用“turn”使用“turnSteeringWheel”方法,等等——不同的事情正在做,但它们都被称为“转身” 我希望实现这一点,以便调用代码不必担心所涉及的类型。在本例中,“转动”应足以“转动”螺丝刀、“steeringWheel”或可能需要“转动”的任何东西 在C++中,

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

我希望实现这一点,以便调用代码不必担心所涉及的类型。在本例中,“转动”应足以“转动”螺丝刀、“steeringWheel”或可能需要“转动”的任何东西

在C++中,我会用重载来做这件事,C++会根据数据类型/签名来分类,但是这在PHP中不起作用。 关于我应该从哪里开始有什么建议吗?switch语句是显而易见的,但我认为必须有一个(更优雅的)OO解决方案。没有


TIA

您需要查看PHP手册中的说明

我认为这会起作用

function turn($object) {
    if(method_exists($object, 'turn'.ucwords(get_class($object))) {
        $fname = 'turn'.ucwords(get_class($object));
        return $object->$fname();
    }

    return false;
}

我读过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!

非常好。我当时的想法是接口继承,但在学习OOP之前,我离开了PHP世界!说得好+1.