【问题标题】:PHP execution function when assigned to a variable分配给变量时的PHP执行函数
【发布时间】:2014-09-27 04:44:45
【问题描述】:

我有一个在返回数组之前“回声”的函数。当将该函数分配给如下变量时,它会执行输出回显的函数。这是我认为分配给变量的预期行为吗?谢谢

 function check($link) {
 //.....
  echo "some text ";
 return $array;

}

 $test = check($link);

【问题讨论】:

  • 是的,这很正常,它回显并将值分配给变量。

标签: php function variable-assignment


【解决方案1】:

它逐行执行,所以当它得到echo "some text "; 时它会打印,然后它会返回数组。

【讨论】:

  • 所以通过分配我也调用了函数?
【解决方案2】:

是的,这是预期的行为。您正在创建副作用(回声),同时还分配给变量。您正在同时执行所谓的查询和命令,这是完全合法的。

【讨论】:

    【解决方案3】:

    当你将一个函数分配给一个变量时,php实际上正在执行该函数以获取其返回值,然后将该值分配给该变量。

    所以 php 执行您的函数(因此执行 echo 语句),然后将返回值($array)分配给 $test。

    【讨论】:

      【解决方案4】:

      PHP 解释器会在你的函数中执行任何东西。 echo 函数相当于 Java 中的 System.out.print、C# 中的 Console.WriteLine 和 C++ 中的 cout。这就像将一系列文本写入标准输出。这里唯一的区别是客户端的 Web 浏览器不是控制台,所以提到的字符序列会在 HTTP 响应正文中发送回浏览器。

      【讨论】:

        【解决方案5】:

        你是对的。

        在 PHP 中,虽然看起来很奇怪,但它确实做到了。

        但是,作为一种编程设计,强烈建议将显示与编程逻辑分开:

        /* array */ function check($link) {
          /* array */ $Result = array();
        
          //...
        
          $Result[] = "Sun";
        
          //...
        
          $Result[] = "Mercury";
          $Result[] = "Venus";
          $Result[] = "Earth";
        
          //...
        
          return $Result;
        }
        
        /* array */ $test = check($link);
        

        但是,有时,直接打印到浏览器控制台可能对调试很有帮助:

        /* array */ function check($link) {
          /* array */ $Result = array();
        
          //...
        
          // uncomment, just in severe cases
          //echo("link: [" . $link . "]");
        
          //...
        
          $Result[] = "Sun";
        
          //...
        
          $Result[] = "Mercury";
          $Result[] = "Venus";
          $Result[] = "Earth";
        
          //...
        
          return $Result;
        }
        
        /* array */ $test = check($link);
        

        只是我的 2 美分,干杯。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-21
          • 2012-01-22
          • 2023-03-04
          • 2020-10-18
          相关资源
          最近更新 更多