【问题标题】:Running a loop that has a function inside it运行一个内部有函数的循环
【发布时间】:2012-10-07 10:14:23
【问题描述】:

我在尝试在循环内运行代码时遇到问题,我的循环由一个函数组成。

这是我的代码:

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++){
$val = $new[$i];



function myfunction($value) {   
    //Do something
}

echo $val;
}

问题是代码只输出我数组中的第一个值。我很困惑,难道我不应该在循环中声明一个函数吗?

【问题讨论】:

  • 为什么你的循环中有一个函数?
  • 因为已经给出了正确的答案,所以简短地说明为什么会发生这种情况:您的代码尝试重新定义函数 3 次,这在 PHP 中是不允许的。提示:在脚本开头使用error_reporting(E_ALL); 或在学习/开发时将其设置在 php.ini 中 - 使用此设置,您会看到类似于“致命错误,试图重新定义函数 myFunction 中的内容。 ..”
  • for($i=0;$i&lt;=3;$i++){ $val = $new[$i];可以写成foreach ($new as $val) { ...

标签: php function for-loop


【解决方案1】:

您的代码以致命错误告终,因为在第二次迭代中它试图重新声明函数myfunction。这就是为什么它只打印数组的第一个值。

为了避免该致命错误,您可以使用function_exists() 函数检查该函数是否已经定义,如下所示:

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
    $val = $new[$i];
    if(!function_exists('myfunction'))
    {
        function myfunction($value) {
            //Do something
        }
    }
    echo $val;
}

PHP 是一种脚本语言,在 for 循环或 if 语句中声明函数在语法上是正确的,但这是一种不好的做法,之后会导致很多错误。
最好的方法是在循环外声明一个函数,如果需要,可以在这样的循环内调用它:

<?php
function myfunction($value) {
    //Do something
}

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
    $val = $new[$i];
    myfunction($value); //may you was intended to pass $val here?
    echo $val;
}

【讨论】:

  • 我觉得 if(!function_exists('myfunction')) 应该内置到语言规范中。如果有人想在循环中声明一个函数(这是允许的并且有有趣的用途),他们不应该每次都使用相同的样板。
【解决方案2】:

不要在循环内声明函数,在循环前声明,然后在循环内用myFunction($value);调用它

【讨论】:

  • "在之前声明" ...或之后;-)
  • Psh,只要遵循编程最佳实践,您通常希望首先声明您的函数。但确实,PHP 会让你在之后声明它。 =P
【解决方案3】:

函数应该在一个单独的过程中

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
   $val = $new[$i];
   myfunction($val)
   echo $val;
}

那么这就是你的功能

function myfunction($value) 
{   
    //Do something
}

【讨论】:

  • 谢谢伙计,我知道我错过了一些小东西,我浪费了一个小时试图弄清楚,我现在觉得很愚蠢:-D
【解决方案4】:
  • 在循环外声明函数
  • 要么从函数中返回一个值,要么让函数输出数据

例如:

function myfunction($value) {   
  //Do something
  echo $value;
}

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++) {
  myfunction($new[$i]);
}

【讨论】:

    【解决方案5】:

    我假设您想打印出数组的前 4 个元素。 做这样的事情

    function myfunction() {   
      $new = array(1,2,3,4);
      for($i=0;$i<=3;$i++){
        $val = $new[$i];
        echo $val;
      }
    }
    
    myfunction();
    

    【讨论】:

      【解决方案6】:

      你应该在循环外声明函数

      function myfunction($value) {    
          return ($value + 25); // an example
      }
      
      $new = array(1,2,3,4); 
      for($i = 0; $i < count($new); $i++){
          echo myfunction($new[$i]); 
      } 
      

      您还应该将循环设置为从 0 到数组末尾,因此如果数组中的条目超过 4 个,则代码应该没问题

      【讨论】:

        【解决方案7】:

        您可以改为声明一个匿名函数:

        for ($i=0; $i<=3; $i++) {
            // code
            $myFunction = function($value) { /* code */ }
            $myFunction($val);
            // code
        }
        

        【讨论】:

          【解决方案8】:

          这不是正确的做法... 先在循环外声明函数,再在循环内调用函数

          function myfunction($value) {   
              //Do something
          }
          
          
          $new = array(1,2,3,4);
          for($i=0;$i<=3;$i++){
             $val = $new[$i];
             myfunction( $val);  //call function where u wanted... here (in your  case)
             echo $val;
          }
          

          【讨论】:

            【解决方案9】:

            你不应该在循环中声明函数...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-05-10
              • 2022-08-18
              • 2020-06-05
              相关资源
              最近更新 更多