php - 有人能解释一下这段代码是如何返回 4 的吗

标签 php

请看下面的代码,它在 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)

  1. $var_a = '33';

    很简单,将字符串 "33" 分配给 $var_a

  2. $var_b = &$var_a;$var_c = &$var_b;

    $var_b$var_c 赋给$var_a 的引用地址。参见 http://php.net/manual/language.references.php .出于所有意图和目的,它们是具有不同名称的相同变量。

对于下一行,我将按照评估顺序将其分解为多个部分

  1. "2 + $var_b"

    这是一个值为 "2 + 33" 的字符串。 33 来自 $var_a 赋值

  2. $var_b ="2 + $var_b"

    这会将前面的字符串 ("2 + 33") 分配给 $var_b,然后分配给 $var_a$var_c 。赋值表达式的返回值是分配的值。

  3. $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/

相关文章:

javascript - 发送每行表单的下拉值

php - PHP 上的 OpenSSL 问题 - 不同版本的不同行为

php - 选择不带 `e.` 或 `main_table` 的字段 - Magento

php - COMPOSER : choose the command line php you want to use. 那里什么都没有

javascript - 为什么 php 变量不能与我的 Javascript/Laravel-5 Google map 代码一起使用?

javascript图片base64和php图片base64_encode不同

php - 如何替换 ZF2 应用程序中的 PhpRenderer

php - Laravel Livewire - 常量表达式在 $rules 属性中包含无效操作

php - 获取可用时间段 MySQL PHP

javascript - 使用 javascript 克隆 php foreach 元素