質問
私はこのような何かを達成したいと思います:「ドライバー」オブジェクト/のparam使用を「オン」の呼び出し、例えば、「ターン」と言う、メソッドを呼び出し、その後、「ターン」は、異なるデータ型に異なっ適用されています「ターン」の異なるものが行われているが、それらは両方とも呼ばれている。
- 「ステアリングホイール」オブジェクト/ paramは「turnSteeringWheel」方法などを使用して「ターン」呼び出し「turnScrewdriver」方法、私は、呼び出し元のコードが関係するタイプ(複数可)を心配する必要がないように、これを実装したいと思います。この例では、「ドライバー」、「ステアリングホイール」を、「オン」に十分なはずである「オン」または何をする必要があるかもしれません「となった。」
C ++で私が過負荷状態にしてこれを行うだろう - とC ++は、データ型/署名に基づいて物事を整理う - 。これは、PHPで動作しません。
私は始めるべき場所についての任意の提案ですか? switch文は明白ですが、私は(よりエレガントな)オブジェクト指向のソリューションが存在しなければならないと思っています。ノー?
TIA
解決
私はdavethegr8のソリューションを読んで、1つが強く型付けと同じことを行うことができそうです。
<?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()
方法を持たなければならないことを確認することができます。 <=>を回し達成するために、自身のことを行うことができます実装する各クラスます。
他のヒント
私はこれが動作すると思います...
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