我想完成这样的事情:调用一个方法,说"转",然后对不同的数据类型进行不同的"转向",例如,用"螺丝刀"对象调用"turn"/ param使用"turnScrewdriver" "方法,用"steeringWheel"对象/ param调用"turn"使用"turnSteeringWheel"方法等等 - 正在做不同的事情,但它们都被称为"转向".
我想实现这一点,以便调用代码不必担心涉及的类型.在这个例子中,"转弯"应该足以"转动""螺丝刀","steeringWheel"或任何可能需要"转动"的东西.
在C++中,我会通过重载执行此操作 - 并且C++会根据数据类型/签名对事物进行排序 - 但这在PHP中不起作用.
有关我应该从哪里开始的任何建议?switch语句很明显,但我认为必须有一个(更优雅的)OO解决方案.没有?
TIA
我读过davethegr8的解决方案,但似乎可以用更强的打字做同样的事情:
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
可以自己完成转换.