2017-02-18 15 views
1

連鎖を条件付きで構築する方法はありますか?例:変数を条件付きメソッド連鎖を可能にするPHP連鎖のメソッドとして使用する

$chain = $restaurant->allFoods()->$filter->get(); 

その後$filterは動的であるか、条件付き条件が満たされた場合、チェーンはなるので

if ($user == "vegetarian") 
{ 
    $filter = "->onlyVegetables()"; 
} 

を設定します。

$chain = $restaurant->allFoods()->onlyVegetables()->get(); 

$chain = $restaurant->allFoods()->get(); 

ですこれは可能ですか?これは何と呼ばれていますか?ありがとう

+0

あなたはそれを試してみましたか?何が起こった? – miken32

+0

動的なコードを構築することはevalでは可能ですが、ほとんどの場合「eval is evil」 – Sascha

答えて

2

はい、フィルタに引数を渡す必要があるかどうかに応じて、メソッド__get/__ callでオーバーロードします。

<?php 
function __get($user) { 
    if($user == 'vegetarian') { 
    return $this->onlyVegetables(); 
    } 
    return $this; 
} 

http://php.net/manual/en/language.oop5.overloading.php

+0

親モデルに '__get()'や '__call()'を追加できない場合はどうなりますか? –

+1

クラスを拡張することも、フィルターのファサードメソッドを実装するためのラッパーを作成することもできます。それはあなたが使用しようとしているクラスに依存します。 –

関連する問題