类似于PHP中的重载?
我想这样做:调用一个方法,说“turn”,然后对不同的数据类型应用不同的“turn”,例如,使用“螺丝刀”对象/param调用“turn”使用“turnSwitch”方法,使用“steeringWheel”对象/param调用“turn”使用“turnSteeringWheel”方法,等等——不同的事情正在做,但它们都被称为“转身” 我希望实现这一点,以便调用代码不必担心所涉及的类型。在本例中,“转动”应足以“转动”螺丝刀、“steeringWheel”或可能需要“转动”的任何东西 在C++中,我会用重载来做这件事,C++会根据数据类型/签名来分类,但是这在PHP中不起作用。 关于我应该从哪里开始有什么建议吗?switch语句是显而易见的,但我认为必须有一个(更优雅的)OO解决方案。没有类似于PHP中的重载?,php,oop,overloading,Php,Oop,Overloading,我想这样做:调用一个方法,说“turn”,然后对不同的数据类型应用不同的“turn”,例如,使用“螺丝刀”对象/param调用“turn”使用“turnSwitch”方法,使用“steeringWheel”对象/param调用“turn”使用“turnSteeringWheel”方法,等等——不同的事情正在做,但它们都被称为“转身” 我希望实现这一点,以便调用代码不必担心所涉及的类型。在本例中,“转动”应足以“转动”螺丝刀、“steeringWheel”或可能需要“转动”的任何东西 在C++中,
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.