2017-02-18 2 views
1

Existe-t-il un moyen de créer la chaîne de manière conditionnelle? Exemple:Utilisez la variable comme méthodes dans la chaîne PHP pour autoriser le chaînage de méthodes conditionnelles

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

Ensuite $filter est dynamique ou conditionnelle définie

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

Donc, si la condition est remplie, la chaîne deviendrait:

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

autre

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

Est cela est-il possible? Comment s'appelle-t-il? Merci

+0

Avez-vous essayé? Qu'est-il arrivé? – miken32

+0

Construire du code dynamique est possible avec eval, mais la plupart disent: "eval est mal" – Sascha

Répondre

2

Oui, en surchargeant avec les méthodes __get/__ appel, selon si vous avez besoin de passer des arguments au filtre ou non.

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

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

+0

et si je ne peux pas ajouter '__get()' ni '__call()' au modèle parent? –

+1

Vous pouvez étendre la classe ou écrire un wrapper pour implémenter des méthodes de façade pour les filtres. Cela dépend de la classe (s) que vous essayez d'utiliser. –