【问题标题】:PHP array_walk require_oncePHP array_walk 需要一次
【发布时间】:2014-01-25 11:08:58
【问题描述】:

我只是想知道是否有人知道为什么我不能使用require_once 作为array_walk 的回调。我可以将它包含在一个匿名函数中并运行它,但它会给出一个无效的回调错误:

$includes = array(
    'file1.php',
    'file2.php',
    'file3.php'
);
array_walk($includes, 'require_once');

【问题讨论】:

  • require_once 不是函数,是语言结构,所以不能直接作为回调函数调用
  • ...如果您尝试使用array_walk($includes, 'echo'),也会出现无效回调错误,因为echo 是一种语言构造而不是函数。
  • +1 到之前的两个 cmets。但说真的,你有什么理由不在这里使用foreach() 循环?
  • 谢谢大家,就像 zigi 说的那样做了一个 foreach 循环,但让我感到不安的是,我无法在一行中完成并保持我的代码更加干净。

标签: php arrays


【解决方案1】:

require_once 不是 PHP 函数,而是一个控制结构。

【讨论】:

    【解决方案2】:

    您将浪费更多时间找出问题所在。只需使用:

    $includes = [
        'file1.php',
        'file2.php',
        'file3.php'
    ];
    foreach($includes as $include) {
        require_once($include);
    }
    

    【讨论】:

      【解决方案3】:

      你可以创造

      function my_require_once ($name)
      {
          require_once $name;
      }
      

      其他人是对的,这不是函数。它在您编写的 PHP 代码的模式之外运行。文件的内容被带入全局命名空间,即使它在函数中被调用,如上所述。

      我用这个,例如做类似的事情

      function my_log ($message, $extra_data = null)
      {
          global $php_library;
          require_once "$php_library/log.php"; // big and complicated functions, so defer loading
      
          my_log_fancy_stuff ($message, $extra_data);
      }
      

      【讨论】:

        【解决方案4】:

        正如 Martin 所写, require once 不是函数,因此您使用 array_walk 的解决方案不起作用。如果你想包含多个文件,你可以尝试使用这个:

        function require_multi($files) 
        {
            $files = func_get_args();
            foreach($files as $file)
            {
                require_once($file);
            }
        }
        

        用法:

        require_multi("fil1.php", "file2.php", "file3.php");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-27
          • 2011-12-13
          • 1970-01-01
          • 1970-01-01
          • 2012-10-22
          • 2012-11-10
          • 2018-03-16
          • 2012-01-06
          相关资源
          最近更新 更多