在 PHP 中,在没有赋值的情况下编写一个变量(已经实例化并设置为一个值)是否是语法上有效的语句? (例如 $My_Variable;)
In PHP, is writing a variable (already instantiated and set to a value) without assignment a syntactically valid statement? (eg. $My_Variable;)
我在 PHP 中有一个标准化的构建过程,其中通常的倒数第二个输出是 PHP 数组 .
我的本意是总是到return一个JSON字符串,所以很正常,最后标准化构建过程包括以下几行:
// STRINGIFY DATA
$My_Data = json_encode($My_Data);
// SEND DATA
return $My_Data;
我第一次有一个构建过程,其中倒数第二个输出是 already a JSON String.
出于标准化目的,我仍想包括 // STRINGIFY DATA
步骤。
但我真的不想用:
// STRINGIFY DATA
$My_Data = json_encode(json_decode($My_Data, TRUE));
如果我能避免的话。
在没有赋值的情况下声明变量在语法上是否有效?
// STRINGIFY DATA
$My_Data;
当 PHP 看到一个已经实例化的变量已经有一个值时,它会做什么...这就是整个语句?
以上似乎没有破坏脚本,但是 PHP 正在做任何处理吗?
还是它对上述内容的关注程度不及评论?
Is it syntactically valid to state the variable without assignment?
是的。正如您自己发现的那样,它不会给出语法错误。这是因为 the definition of "statement" in PHP's parser include expr ';'
as one of its expansions. In other words, every expression in PHP is a valid statement. The definition of expr
不出所料地将 variable
作为其第一个扩展 - 变量本身就是一个有效的表达式。
(附带说明,在某些语言中,语句和表达式是完全等价的;在 PHP 中,有些结构是有效的 语句 但不能使用作为表达式.)
is PHP doing any processing?
我们可以通过查看生成的“操作码”(PHP 被编译成的中间高级语言)来发现这一点。例如,运行宁以下:
$a = 42;
$foo;
$b = 69;
“Vulcan 逻辑调试器”incorporated into this site 显示:
number of ops: 3
compiled vars: !0 = $a, !1 = $foo, !2 = $b
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
3 0 E > ASSIGN !0, 42
5 1 ASSIGN !2, 69
6 2 > RETURN 1
请注意,编译器已为 $foo
(!1 = $foo
) 分配了一个“已编译变量”,但生成的唯一实际操作是对 $a
和 $b
的赋值.因此可以肯定地说,在到达 $foo;
行时的 运行 时间不会发生任何操作。
我在 PHP 中有一个标准化的构建过程,其中通常的倒数第二个输出是 PHP 数组 .
我的本意是总是到return一个JSON字符串,所以很正常,最后标准化构建过程包括以下几行:
// STRINGIFY DATA
$My_Data = json_encode($My_Data);
// SEND DATA
return $My_Data;
我第一次有一个构建过程,其中倒数第二个输出是 already a JSON String.
出于标准化目的,我仍想包括 // STRINGIFY DATA
步骤。
但我真的不想用:
// STRINGIFY DATA
$My_Data = json_encode(json_decode($My_Data, TRUE));
如果我能避免的话。
在没有赋值的情况下声明变量在语法上是否有效?
// STRINGIFY DATA
$My_Data;
当 PHP 看到一个已经实例化的变量已经有一个值时,它会做什么...这就是整个语句?
以上似乎没有破坏脚本,但是 PHP 正在做任何处理吗?
还是它对上述内容的关注程度不及评论?
Is it syntactically valid to state the variable without assignment?
是的。正如您自己发现的那样,它不会给出语法错误。这是因为 the definition of "statement" in PHP's parser include expr ';'
as one of its expansions. In other words, every expression in PHP is a valid statement. The definition of expr
不出所料地将 variable
作为其第一个扩展 - 变量本身就是一个有效的表达式。
(附带说明,在某些语言中,语句和表达式是完全等价的;在 PHP 中,有些结构是有效的 语句 但不能使用作为表达式.)
is PHP doing any processing?
我们可以通过查看生成的“操作码”(PHP 被编译成的中间高级语言)来发现这一点。例如,运行宁以下:
$a = 42;
$foo;
$b = 69;
“Vulcan 逻辑调试器”incorporated into this site 显示:
number of ops: 3
compiled vars: !0 = $a, !1 = $foo, !2 = $b
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
3 0 E > ASSIGN !0, 42
5 1 ASSIGN !2, 69
6 2 > RETURN 1
请注意,编译器已为 $foo
(!1 = $foo
) 分配了一个“已编译变量”,但生成的唯一实际操作是对 $a
和 $b
的赋值.因此可以肯定地说,在到达 $foo;
行时的 运行 时间不会发生任何操作。