首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP有自动生动的功能吗?

PHP有自动生动的功能吗?
EN

Stack Overflow用户
提问于 2011-05-11 20:41:51
回答 3查看 700关注 0票数 18

PHP.net上搜索自动生动没有得到任何结果。在撰写本文时,Wikipedia声称只有Perl拥有它。在Google中搜索"php autovivification“没有明确的结果。

这段PHP代码运行良好:

代码语言:javascript
复制
$test['a'][4][6]['b'] = "hello world";
var_dump($test);

array
  'a' => 
    array
      4 => 
        array
          'b' => 
            array
              ...

有没有人能提供一个规范的答案(最好有参考资料),说明PHP确实有这个功能,以及引入它的版本、怪癖、快捷方式等细节?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-11 21:34:51

是的,PHP确实有自动生动功能(并且已经有很长一段时间了),尽管这个术语并没有提到它。PHP.net声明:

可以通过显式设置数组中的值来修改现有数组。

这是通过给数组赋值,在括号中指定键来完成的。键也可以省略,结果是一对空的括号([])。

$arrkey = value;$arr[] = value;// key可以是整数或字符串// value可以是任何类型的值

如果$arr尚不存在,则会创建它,因此这也是创建数组的另一种方法。

但是,文档指出,如果您尝试访问未设置的数组(或键)的值,它将返回一个错误:

尝试访问尚未定义的数组键与访问任何其他未定义的变量相同:将发出E_NOTICE级别的错误消息,结果将为NULL。

我已经找到了我的旧PHP3手册,其中说明了以下内容:

您还可以通过简单地将值添加到数组来创建数组。

$a[] =“你好”;

票数 11
EN

Stack Overflow用户

发布于 2011-05-11 21:21:25

嗯,不是100%,如果PHP支持自动生动,但你发布的语法在大部分情况下是有效的。

代码语言:javascript
复制
// 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

票数 3
EN

Stack Overflow用户

发布于 2011-10-26 09:40:26

在perl中,项在检查时会自动激活,不需要赋值。到达最里面的请求密钥所需的项的路径将在检查时创建。请注意,{d => undef} is条目并不是实际创建的,而是隐含的。

代码语言:javascript
复制
   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;

输出:

代码语言:javascript
复制
$VAR1 = {};
$VAR1 = {
          'b' => {
                   'c' => {}
                 }
        };

perl数组示例:

代码语言:javascript
复制
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;

输出:

代码语言:javascript
复制
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
        ];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5964420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档