请看下面的代码,它在 PHP 中完美运行。任何人都可以向我解释这段代码是如何工作的以及它返回 4 的原因。
<?php
error_reporting(0);
$var_a = '33';
$var_b = &$var_a;
$var_c = &$var_b;
echo $var_c * ( $var_b ="2 + $var_b");
?>
这个问题是php程序员的招聘面试。
最佳答案
将其逐行分解是有益的。启用错误报告还可以找到更多信息,即 error_reporting(E_ALL)
$var_a = '33';
很简单,将字符串
"33"
分配给$var_a
。$var_b = &$var_a;
和$var_c = &$var_b;
将
$var_b
和$var_c
赋给$var_a
的引用地址。参见 http://php.net/manual/language.references.php .出于所有意图和目的,它们是具有不同名称的相同变量。
对于下一行,我将按照评估顺序将其分解为多个部分
"2 + $var_b"
这是一个值为
"2 + 33"
的字符串。 33 来自$var_a
赋值$var_b ="2 + $var_b"
这会将前面的字符串 (
"2 + 33"
) 分配给$var_b
,然后分配给$var_a
和$var_c
。赋值表达式的返回值是分配的值。$var_c * ($var_b = "2 + $var_b")
你剩下的是看起来像的东西
"2 + 33" * "2 + 33"
启用错误报告后,您会得到
PHP Notice: A non well formed numeric value encountered in ...
因为这显然不是一个合理的数学表达式。但是,PHP 非常宽容,并尽力对其进行评估。发生的事情是它试图从每个操作数中解析尽可能多的数字内容,这些操作数在
"2"
之后的第一个空格处停止,所以你剩下"2" * "2"
由于 PHP 的松散类型,它的计算结果为
4
。
关于php - 有人能解释一下这段代码是如何返回 4 的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51257206/