【问题标题】:PHP include/require within a functionPHP 在函数中包含/要求
【发布时间】:2011-09-18 02:57:54
【问题描述】:

是否可以在 PHP 函数内的包含文件中包含 return 语句?

我希望这样做,因为我在单独的文件中有很多函数,而且它们的顶部都有大量共享代码。

As in
function sync() {
  include_once file.php;
  echo "Test";
}

文件.php:

...
return "Something";

目前返回的东西似乎超出了include_once而不是同步函数,被包含文件的返回是否有可能出现?

抱歉,这个问题有点奇怪,希望我能说得通。

谢谢,

【问题讨论】:

    标签: php return break


    【解决方案1】:

    您可以通过return 语句将包含文件中的数据返回到调用文件中。

    include.php

    return array("code" => "007", "name => "James Bond");
    

    file.php

    $result = include_once "include.php";
    var_dump("result);
    

    但是您不能调用return $something; 并将其作为调用脚本中的返回语句。 return 仅在当前范围内有效。

    编辑:

    我希望这样做,因为我有很多 单独文件中的函数和 他们都有大量的共享 代码在顶部。

    在这种情况下,你为什么不把这个“共享代码”放到单独的函数中呢?这样可以很好地完成工作因为拥有函数的目的之一是重用你的代码 不同地方不用再写了.

    【讨论】:

    • 我不认为这是被问到的。问题似乎是“我可以在包含的文件中放一个 return 吗,这就像在我的函数中调用了'return'。事实并非如此。
    • @Nanne: 是的.. 发布后立即编辑我的答案
    • 不幸的是,这是一个朋友“必须”将他的所有项目放在烦人的单独文件中的工作:-(
    • @Pez Cuckow:好的——然后你可以试试这个(但它只有在包含的文件总是使用return 语句时才有效):return include_once "include.php";。除此之外——建议你的朋友重构代码以使用函数——更好的逻辑和更少的麻烦。
    • 请注意,如果第二次访问,include_once 或 require_once 将返回 true 而不是数组。例如,当使用此策略加载配置文件时,这可能会很糟糕。除非您确定它只能触发一次,否则请改用 include 或 require。
    【解决方案2】:

    return 不起作用,但如果您尝试在包含文件中回显某些内容并将其返回到其他地方,则可以使用输出缓冲区;

    function sync() {
      ob_start();
      include "file.php";
      $output = ob_get_clean();
    // now what ever you echoed in the file.php is inside the output variable
      return $output;
    }
    

    【讨论】:

    • 也许有人可以解释一下-1,这是解决问题的可行方法
    • 我自己没有-1,但我可以解释:答案开头的“返回不起作用”是完全错误的。来自包含文件的全局范围的return 将返回一个值,该值用作包含语句本身的返回值。
    【解决方案3】:

    我不认为它是这样工作的。包含不只是将代码放在适当的位置,它还会评估它。所以返回意味着您的“包含”函数调用将返回该值。

    另请参阅手册中关于此的部分:

    处理退货:可以 在一个内部执行 return() 语句 包含文件以终止 在该文件中处理并返回 调用它的脚本。

    return 语句返回包含的文件,并且不插入“return”语句。

    manual 有一个示例(示例 #5)显示“返回”的作用:

    简化示例:

    return.php

    <?php  
    $var = 'PHP';
    return $var;
    ?>
    
    testreturns.php
    
    <?php   
    $foo = include 'return.php';
    echo $foo; // prints 'PHP'
    ?>
    

    【讨论】:

      【解决方案4】:

      我认为您期望return 的行为更像是异常而不是返回语句。以如下代码为例:

      return.php:

      return true;
      
      ?>
      

      exception.php:

      <?php
      
      throw new exception();
      
      ?>
      

      当你执行以下代码时:

      <?php
      
      function testReturn() {
          echo 'Executing testReturn()...';
          include_once('return.php');
          echo 'testReturn() executed normally.';
      }
      
      function testException() {
          echo 'Executing testException()...';
          include_once('exception.php');
          echo 'testException() executed normally.';
      }
      
      testReturn();
      
      echo "\n\n";
      
      try {
          testException();
      }
      catch (exception $e) {}
      
      ?>
      

      ...您会得到以下输出结果:

      正在执行 testReturn()...testReturn() 正常执行。

      正在执行 testException()...

      如果您确实使用异常方法,请确保将您的函数调用放在 try...catch 块中 - 让异常到处乱飞对业务不利。

      【讨论】:

        【解决方案5】:

        像这样的摇滚:

        index.php

        function foo() {
           return (include 'bar.php');
        }
        print_r(foo());
        

        bar.php

        echo "I will call the police";
        return array('WAWAWA', 'BABABA');
        

        输出

        I will call the police
        Array
        (
            [0] => WAWAWA
            [1] => BABABA
        )
        

        告诉我怎么做

        像这样:

        return (include 'bar.php');
        

        祝你有美好的一天!

        【讨论】:

          猜你喜欢
          • 2011-08-11
          • 1970-01-01
          • 2013-06-12
          • 1970-01-01
          • 2012-02-29
          • 2011-09-26
          • 2015-02-03
          • 2018-09-12
          • 2015-12-18
          相关资源
          最近更新 更多