php – 有人可以解释这段代码如何返回4

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...