没有名字的变量:$ {''}

时间:2017-07-27 07:41:44

标签: php

所以variable variables已存在。这意味着这是有效的

$a = 'test';
$$a = 'Hello';
echo ${'test'}; //outputs 'Hello'

但是现在我遇到了一些使用没有名字的变量的奇怪代码:

function test(&$numRows) {
    $numRows = 5;
    echo ' -- done test';
}

$value = 0;
test($value);
echo ' -- result is '.$value;

test(${''}); //variable without name

http://ideone.com/gTvayV Code fiddle

输出是:

  

- 完成测试 - 结果为5 - 完成测试

这意味着,代码不会崩溃。

现在我的问题是:当参数是没有名称的变量时,如果更改$numRows值会发生什么?将价值写入必杀技吗? PHP变量是否等同于/dev/null?  我无法找到任何具体的内容。

提前致谢

2 个答案:

答案 0 :(得分:2)

${''}是一个有效变量,其名称恰好是一个空字符串。如果你以前从未设置它,那么它是未定义的。

var_dump(isset(${''}));   // if you have never set it before, it is undefined.

您没有看到任何错误,因为您已禁用NOTICE错误消息。

error_reporting(E_ALL);
ini_set('display_errors', 1);

echo ${''}; // Notice: Undefined variable:

您可以这样设置:

${''} = 10;
echo ${''};  // shows 10

答案 1 :(得分:1)

  

现在我的问题是:如果更改$ numRows值会发生什么   当参数是一个没有名字的变量?

没有名称的变量,PHP中的空字符串是一个完全有效的名称。

也许我错了,但在PHP中,所有变量都可以通过它们的名称(或更确切地说,它们的名称的字符串表示)来访问,并且因为空字符串仍然是一个字符串,所以它算作一个有效名称。

将变量视为数组键值对。您可以使用空字符串创建数组键:

$arr = [];
$arr[''] = 'appul';
var_dump($arr['']); // prints: string(5) "appul"
$arr[''] = 'ponka';
var_dump($arr['']); // prints: string(5) "ponka"

每当您访问$arr['']时,您都会使用相同的值。

您也可以使用$ GLOBAL变量将所有变量作为字符串访问,这样您就可以检查您的"无名"变量:

${''} = 'ponka';
var_dump($GLOBALS['']); // prints: string(5) "ponka"
${''} = 'appul';
var_dump($GLOBALS['']); // prints: string(5) "appul"
  

这些价​​值会写入必杀技吗?这是PHP变量等同于/ dev / null吗?我无法找到任何有关此事的具体信息。

不,它没有进入必杀技,它静静地坐在全球空间中,访问它有点棘手,但除此之外,它是一个像其他任何人一样的正常变量。