在 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; 行时的 运行 时间不会发生任何操作。