0

私はクラスを設計していますが、これまでのところ、おおよそ次のようなものがあります

main.php で

$coolObject = new CoolObject(true);

foreach($array as $key=>$val)
{
    $coolObject->doFunction($val);
}

次に CoolObject の内部:

class CoolObject
{
    private $_useFunction;

    public function __construct($useFoo)
    {
        //THIS IS WHERE I NEED HELP
        if($useFoo){
            $this->_useFunction = $this->_foo();
        }
        else{
            $this->_useFunction = $this->_bar();
        }
    }

    public function doFunction($values)
    {
        $this->_useFunction($values);
    }

    private function foo($values){
        //do stuff
    }

    private function bar($values){
        //do other stuff
    }
}

この機能を処理できる doFunction に if ステートメントまたはスイッチを入れることができることはわかっていますが、クロージャー/ラムダに詳しくないので、これが適切な状況なのか、それとも完全にオフなのか確信が持てませんでした。ベース

4

1 に答える 1

1

あなたが達成しようとしているのは (私の知る限り)、PHP の関数ポインターです。

あなたは本当に見てみる必要があります: Array Pointer to a function in PHP

これを解決するには、継承が最も簡単でクリーンな方法になると思います。

したがって、おそらく次のように終了します。

クラス CoolObject { プライベート $_useFunction;

public function __construct($useFoo)
{
    //THIS IS WHERE I NEED HELP
    if($useFoo){
        $this->_useFunction = 'foo';
    }
    else{
        $this->_useFunction = 'bar';
    }
}

public function doFunction($values)
{
//Edited as @newacct corrects
$this->$_useFunction($values); 
}

private function foo($values){
    //do stuff
}

private function bar($values){
    //do other stuff
}

}

于 2013-02-18T16:07:37.633 に答える