PHP:命名参数/数组的语法不那么难看?

时间:2010-07-13 16:10:43

标签: php syntax coding-style

这是我想要完成的事情:

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

// or something like that

这基本上是在PHP中使用named parameters的方法。

现在,为了构建这个$args数组,我不得不写出如下的丑陋语法:

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

foo($builtArgs);

当我向数组添加更多维度时,这会变得更加丑陋,并且还迫使我编写大量的array(...)构造。有没有比较漂亮的方法呢?

首先,如果我们可以使用类似Python的语法,就可以完成:

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

但它是PHP。

4 个答案:

答案 0 :(得分:6)

您可以创建一个JSON编码的字符串,并使用json_decode()将其转换为变量。这个语法与你提到的类似Python的语法非常相似。

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

编辑:更新了代码以适应@herehere的建议。

答案 1 :(得分:2)

没有。用于创建数组的替代语法已多次proposed(链接在dev邮件列表中列出了5个单独的线程),但它们被拒绝了。

答案 2 :(得分:2)

不,在PHP中没有编写数组或对象的“短语法”:你必须编写所有array()
(至少,没有这样的语法......可能会出现在PHP的未来版本中;谁知道^^)

但请注意,有太多像这样的符号化阵列会让那些必须调用你的函数的人更难:使用实参数意味着在IDE中自动完成和类型提示......

答案 3 :(得分:2)

没有其他方法可以构建这些嵌套数组 - 但是如何设置代码格式以使其可读,还有一些选项。这是严格的优先选择:

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'
);
相关问题