请参阅以下代码,这在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.