在PHP.net上搜索自动生动没有得到任何结果。在撰写本文时,Wikipedia声称只有Perl拥有它。在Google中搜索"php autovivification“没有明确的结果。
这段PHP代码运行良好:
$test['a'][4][6]['b'] = "hello world";
var_dump($test);
array
'a' =>
array
4 =>
array
'b' =>
array
...有没有人能提供一个规范的答案(最好有参考资料),说明PHP确实有这个功能,以及引入它的版本、怪癖、快捷方式等细节?
发布于 2011-05-11 21:34:51
是的,PHP确实有自动生动功能(并且已经有很长一段时间了),尽管这个术语并没有提到它。PHP.net声明:
可以通过显式设置数组中的值来修改现有数组。
这是通过给数组赋值,在括号中指定键来完成的。键也可以省略,结果是一对空的括号([])。
$arrkey = value;$arr[] = value;// key可以是整数或字符串// value可以是任何类型的值
如果$arr尚不存在,则会创建它,因此这也是创建数组的另一种方法。
但是,文档指出,如果您尝试访问未设置的数组(或键)的值,它将返回一个错误:
尝试访问尚未定义的数组键与访问任何其他未定义的变量相同:将发出E_NOTICE级别的错误消息,结果将为NULL。
我已经找到了我的旧PHP3手册,其中说明了以下内容:
您还可以通过简单地将值添加到数组来创建数组。
$a[] =“你好”;
发布于 2011-05-11 21:21:25
嗯,不是100%,如果PHP支持自动生动,但你发布的语法在大部分情况下是有效的。
// Works as you have assigned a value of 'hello'
$a['a'][4][6]['b'] = "hello";
var_dump($a);
echo print_r($a,true);
// works as you have assigned a value of 'world'
$b[][][][] = "world";
var_dump($b);
echo print_r($b,true);
// ERROR: Cannot use [] for reading
$c[];
var_dump($c);
echo print_r($c,true);无法使用[]读取:Related Link
发布于 2011-10-26 09:40:26
在perl中,项在检查时会自动激活,不需要赋值。到达最里面的请求密钥所需的项的路径将在检查时创建。请注意,{d => undef} is条目并不是实际创建的,而是隐含的。
use strict;
use warnings;
use Data::Dumper;
my %a; # as is empty, equivalent to \%a is {};
print Dumper %a;
$a{b}{c}{d}; # \%a is now { b => { c => {}}}
# returns an undef value.
print Dumper \%a;输出:
$VAR1 = {};
$VAR1 = {
'b' => {
'c' => {}
}
};perl数组示例:
use strict;
use warnings;
use Data::Dumper;
my (@b,@c); # @b=(), @c=()
print Dumper \@b;
$b[3]; # @b=() aka unchanged.
print Dumper \@b;
$b[3][2][1]; # @b=(undef,undef,undef,[undef,undef,[]])
print Dumper \@b;
print Dumper \@c;
$c[3]=1 ; # @c=(undef,undef,undef,1)
print Dumper \@c;输出:
Useless use of array element in void context at -e line 7.
Useless use of array element in void context at -e line 9.
$VAR1 = [];
$VAR1 = [];
$VAR1 = [
undef,
undef,
undef,
[
undef,
undef,
[]
]
];
$VAR1 = [];
$VAR1 = [
undef,
undef,
undef,
1
];https://stackoverflow.com/questions/5964420
复制相似问题