Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不带名称的变量:${';';}_Php - Fatal编程技术网

Php 不带名称的变量:${';';}

Php 不带名称的变量:${';';},php,Php,它们的存在也是如此。这意味着这是有效的 $a = 'test'; $$a = 'Hello'; echo ${'test'}; //outputs 'Hello' 但是现在我遇到了一些非常奇怪的代码,使用了一个没有名字的变量: function test(&$numRows) { $numRows = 5; echo ' -- done test'; } $value = 0; test($value); echo ' -- result is '.$value;

它们的存在也是如此。这意味着这是有效的

$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

这项研究的结果是:

--完成测试——结果是5——完成测试

这意味着,代码没有崩溃

现在我的问题是:当参数是一个没有名称的变量时,如果更改了
$numRows
值,会发生什么情况?价值会被写进涅盘吗?PHP变量是否等效于
/dev/null
? 我找不到关于这件事的任何具体信息

提前感谢

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

var_dump(isset(${''}));   // if you have never set it before, it is undefined.
您没有看到任何错误,因为您禁用了通知错误消息

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

echo ${''}; // Notice: Undefined variable:
您可以这样设置:

${''} = 10;
echo ${''};  // shows 10
现在我的问题是:如果$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?我找不到关于这件事的任何具体信息


不,它不会进入涅磐,它静静地坐在全局空间中,访问它有点困难,但在其他方面,它和其他变量一样是一个普通变量。

所以
${'}
是一个有效的变量声明,空字符串是一个有效的变量名?我已经更新了Ideone小提琴:并且它确实被设置为正确的值。编辑:问题中的代码没有回显到
${'}
,因此没有显示通知。为什么访问会更困难?您仍然可以使用
var\u dump(${'})
甚至
$var='';变量转储($$var)。好吧,因为如果不键入额外的大括号和撇号,您将无法访问它<代码>$
${''}相比是另外三个字符!:D您也不能使用
$本身。。。无论如何,谢谢你接受我的回答,这是一个有趣的问题!啊,好吧,因为额外的输入:)。但为什么您要通过
$GLOBAL
访问?在函数中定义
${'}
时,它不在全局函数中。我只是想了解你的意图。责怪函数中的
&
操作符。由于该参数是“通过引用调用的”,因此在调用该参数时,它会初始化该变量。当您键入
${'}='something'时也会发生同样的情况
$a=“任何东西”。在给变量赋值之前,不需要初始化变量。哦,我忘了:我使用$GLOBALS的目的是找出变量的去向:这是检查所有现有VAR的好方法。