PHP 在函数中包含/要求

Posted

技术标签:

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

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

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

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

文件.php:

...
return "Something";

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

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

谢谢,

【问题讨论】:

【参考方案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');

祝你有美好的一天!

【讨论】:

以上是关于PHP 在函数中包含/要求的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个类中包含一个 php 函数?

如何在网站上的所有页面中包含带有 css 的模板

在 php 函数中包含 css 内容

在函数中包含我的 connection.php 不起作用 php

如何在自定义 .php 文件中包含 WordPress 函数?

要求 wp-load.php 返回 3 个目录