题
我想完成这样的:调用方法,说“转”,然后有“转”不同地应用于不同的数据类型,例如,调用“转”与“螺丝刀”对象/ PARAM用途所述“turnScrewdriver”的方法,调用“转”与“方向盘”对象/ PARAM使用“turnSteeringWheel”法等 - “转”不同的事情被完成的,但是他们都称为
我想实现这一点,以便调用代码不用担心所涉及的类型。在这个例子中,“转”应足以“转”一个“螺丝刀”,“方向盘”,或任何可能需要“导通”。
在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
可以做自己的事类来完成转向。
其他提示
我想这会工作...
function turn($object) {
if(method_exists($object, 'turn'.ucwords(get_class($object))) {
$fname = 'turn'.ucwords(get_class($object));
return $object->$fname();
}
return false;
}
您需要检查指令的PHP手册这里
不隶属于 StackOverflow