这样创建PHP变量可以吗?

这样创建PHP变量可以吗?,php,Php,考虑: $snode->field_length = array(); $snode->field_length['und'] = array(); $snode->field_length['und'][0] = array(); $snode->field_length['und'][0]['value'] = 5; 与仅仅写作相比: $snode->field_length['und'][0]['value'] = 5; 在第二种情况下,您将分配

考虑:

 $snode->field_length = array();
 $snode->field_length['und'] = array();
 $snode->field_length['und'][0] = array();
 $snode->field_length['und'][0]['value'] = 5;
与仅仅写作相比:

 $snode->field_length['und'][0]['value'] = 5;

在第二种情况下,您将分配给不存在的字段。然而,PHP并没有抱怨。这是否意味着可以这样编写代码?

是的,可以,但可能不是最清晰的编写方式

PHP具有动态类型,因此在使用变量之前不必指定变量的类型,因为解释器负责推断您在运行时尝试分配的类型

我会考虑使用数组初始化器:

$snode->field_length = array(
    'und' => array(
        array(
            'value' => 5
        )
    )
);
或者,更好的是,在PHP>=5.4中:

$snode->field_length = [
    'und' => [
        [
            'value' => 5
        ]
    ]
];

是的,您可以按照@mchurichi answers所说的去做,但如果有这种情况,当您不知道之前的值时,请使用或:


是的,没关系。。。您正在创建索引。文档是这样说的:如果$arr还不存在,它将被创建,因此这也是创建数组的另一种方法。^但是他们继续说,这种做法是不被鼓励的,因为如果$arr已经包含一些值(例如,请求变量中的字符串),那么这个值将保留在原来的位置,[]实际上可能代表字符串访问操作符。如果您确信它不会导致代码库中描述的问题,并且您的合作者同意,那么就没有问题了。当填充新结构时
=[“und”=>[0=>[“value”=>5]]有时更容易理解。
if(!is_array($snode->field_length)){
    $snode->field_length = array();
}

$snode->field_length = array_merge_recursive($snode->field_length, array(
    'und' => array(
        array(
            'value' => 5
        )
    )
));