質問

私はこのような何かを達成したいと思います:「ドライバー」オブジェクト/の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マニュアルをチェックする必要がここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top