2010-07-13 4 views
3

Voici ce que je suis en train d'accomplir:PHP: syntaxe moins laide pour les paramètres nommés/tableaux?

function foo($args) { 
switch($args['type']) { 
    case 'bar': 
    bar($args['data']); // do something 
    break; 
} 
} 

// or something like that 

Ce qui est essentiellement une façon d'utiliser named parameters en PHP.

Maintenant, pour construire ce tableau $args, je suis obligé d'écrire la syntaxe laid comme:

$builtArgs = array('type' => 'bar', 
    'data' => array(1, 2, 3), 
    'data2' => array(5, 10, 20) 
); 

foo($builtArgs); 

qui obtient plus laid que j'ajouter des dimensions au tableau, et aussi me force à écrire des tonnes de array(...) constructions. Y a-t-il une manière plus jolie de faire ceci?

D'une part, il pourrait être fait si nous pouvions utiliser la syntaxe comme Python:

$buildArgs = {'type' : 'bar', 'data' : [1, 2, 3], 'data2' : [5, 10, 20]}; 

Mais il est PHP.

+1

Personnellement, je ne dirais pas vraiment qu'il est moche (au moins si vous le formater propre), il n'est tout simplement pas aussi confortable d'écrire comme un seul doublure. Personnellement, je le formate aussi en python en plus de lignes, les doublures sont confortables, mais je ne dirais pas que c'est sympa. – enricog

Répondre

6

Vous pouvez créer une chaîne codée JSON et utiliser json_decode() pour le convertir en une variable. Sa syntaxe est très similaire à la syntaxe de type Python que vous avez mentionnée.

$argstr = '{"type" : "bar", "data" : [1, 2, 3], "data2" : [5, 10, 20]}'; 
$buildArgs = json_decode($argstr, true); 

EDIT: code mis à jour pour accommoder la suggestion de @ therefromhere.

+0

+1 pour l'intelligence –

+4

C'est juste que je suis inquiet que quelqu'un puisse commencer à faire ça ...: D –

+2

si vous passez true comme second paramètre à json_decode, alors il retournera les tableaux imbriqués comme vous le souhaitez. Je vous encourage à faire ce que l'OP vous demande, mais j'ai des réserves à propos de l'utilisation de cette option - pour une chose que vous n'obtiendrez pas vérification de la syntaxe jusqu'à ce que vous décodiez la chaîne. –

2

Non Les syntaxes alternatives pour créer des tableaux ont été proposed plusieurs fois (le lien liste 5 threads distincts dans la liste de diffusion dev), mais ils ont été rejetés.

+0

J'ai vu les propositions, mais je ne vois pas pourquoi elles ne sont pas appliquées. – quantumSoup

+0

@Aircule il ya un certain nombre de liens au bas de la page où il est dit: * Discussion sur la liste *. Beaucoup de raisons de lire. – Gordon

2

Non, il n'y a pas de "syntaxe courte" pour écrire des tableaux ou des objets, en PHP: vous devez écrire tous ceux qui sont array().
(Au moins, il n'y a pas de syntaxe ... encore, pourrait venir dans une future version de PHP, qui sait ^^)

Mais attention qui ont trop de tableaux imbriqués comme cette volonté rend les choses plus difficiles pour les personnes qui devront appeler vos fonctions: l'utilisation de paramètres réels signifie l'auto-complétion et l'indication de type dans l'EDI ...

2

Il n'y a pas d'alternative à la construction de ces tableaux imbriqués-- mais il y a des options dans la façon dont vous peut formater votre code qui le rend lisible. Ceci est strictement préférence:

return array 
(
    'text' => array 
    (
     'name'  => 'this is the second', 
     'this'  => 'this is the third', 
     'newarr' => array 
     (
      'example' 
     ), 
    ) 
); 


// Or using the long way 

$array = array(); 

$array += array 
(
    'this' => 'is the first array' 
);