2010-12-30 5 views
0

J'ai récemment fait face à un problème de conception avec PHP. J'ai remarqué que dans une fonction vous pouvez passer en paramètre un tableau. Je n'ai pas remarqué le puissant de cette chose en premier, mais maintenant je suis obsédé par les tableaux. Par exemple, dans ma classe de template, je dois passer des variables et des mysqli_results dans le fichier template (comme phpbb do). Et je me demandais laquelle des possibilités suivantes est la meilleure.Tableaux vs vars simples

# 1 
$tpl = new template(array(
    'vars' = array('var1' => 'val1', 'var2' => 'val2'), 
    'loops' = array('loop1' => $result1, 'loop2' => $result2) 
)); 

# 2 
$tpl = new template; 
$tpl->assignVars(array(
    'var1' => 'val1', 
    'var2' => 'val2' 
)); 
$tpl->assignloops(array(
    'loop1' => $result1, 
    'loop2' => $result2 
)); 

# 3 
$tpl = new template; 
$tpl->assignVar('var1', 'val1'); 
$tpl->assignVar('var1', 'val1'); 
$tpl->assignLoop('loop1', $result1); 
$tpl->assignLoop('loop2', $result2); 

Ou s'il y a quelque chose de mieux. J'ai même pensé à créer une classe db qui effectue une requête comme suit:

$result = $db->fastQuery(array(
     'select' => 'user-name', 
     'from' => $table, 
     'where' => array('user-id' => 123, 'user-image' => 'none'), 
     'fetch' => true 
    )); 

Oh mon Dieu, je suis vraiment obsédé.

+4

Vous êtes obsédé par les tableaux pour cela? Alors vous allez * aimer * [enchaîner] (http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html). –

+0

Connexe: http://stackoverflow.com/questions/2112913/doit-mon-php-fonctions-accept-an-array-of-arguments-or-should-i-explicitly-reque –

+0

Est-ce que cela signifie que tous sont bons exemples? – Shoe

Répondre

1

Si cela ne tenait qu'à moi, je choisirais # 1, je n'aime pas imbriquer des objets et des tableaux seulement si cela est nécessaire. en faisant cela, je garde mon code simple. et si vous suivez votre obsession, vous pourriez finir par écrire un ORM complet.

+0

Désolé, qu'est-ce qu'un "ORM complet"? Je l'ai googlé et cela m'amène à 2 chemins de programmation différents. – Shoe

+0

"Le mappage objet-relationnel (ORM, O/RM et mappage O/R) dans un logiciel informatique est une technique de programmation pour convertir des données entre des systèmes de types incompatibles dans des langages de programmation orientés objet." Wikipédia. habituellement les ORM convertissent les données SQL en objets et prennent en charge les relations sql sans beaucoup de code – Ayoub

1

# 4

permet à la fois:

function assign($name, $val = null) 
{ 
    if (is_array($name)) { 
     // loop through and assign 
    } else { 
     // assign single var 
    } 
} 

Cela ressemble à une surcharge des techniques que vous verriez dans C++/Java.

Vous pouvez également autoriser # 1 en appelant simplement assign dans le constructeur. Il n'est pas rare dans la programmation OOP que le constructeur autorise un raccourci pour définir les propriétés qui peuvent également être définies dans d'autres méthodes.

+0

+1 est ce que je fais sur mes projets open source, pouvoir aux développeurs! – Pablo

Questions connexes