函数中包含的代码不执行返回

时间:2019-08-06 11:31:19

标签: php

我在PHP函数中使用了过滤器,这些过滤器可以返回错误,但是,包含中的返回似乎不起作用:

ie:我有以下“ include.php”文件:

return 'test';

在我的主要代码中,我这样做:

echo retval();
function retval(){
   include 'include.php';
   return 'why';
}

我希望这段代码回显“测试”,但回显“为什么”。

这是基本问题。在生产中,“ include.php”是一个过滤器。它设置变量,该变量在函数中起作用。如果“ include.php”为:

$a = 'test';

我的主要功能是:

echo retval();
function retval(){
    include 'include.php';
    return $a;
}

我得到了预期的代码“ test”。

如果我从“ include.php”文件返回,如下所示:

return 'test';
$a = 'test';

我得到“未定义的变量:main.php中的a”,我希望$ a如果在返回(在“ include.php”中)之后不被设置,我不希望的是“ return $ a当“ include.php”已经返回时,“ main.php”中的“”仍然执行。

如果将“ include.php”的结果放入变量中,则如果“ include.php”中有返回值,它将保存返回值。当没有返回值时,它将是一个“ int(1)”。我可以对此进行测试,但是有更好的方法吗?为什么我会看到这些意外的结果?

1 个答案:

答案 0 :(得分:2)

根据manual,这是预期的行为:默认情况下,包含的文件始终具有返回值(FALSE1),可以使用return覆盖它。你自己。

注意范围:所包含文件的return(无论是隐式还是显式)都不会成为其包含位置(即您的函数)的return。尽管在大多数情况下都包含替换,但替换例外适用(其中一个是:包含的文件必须再次以<?php开头,而不是已经自动假定为PHP;另一个是return仅寻址文件(包括),而不是结果)。

要解决您的其他问题(区分PHP的1默认返回值和您自己引起的返回值)应该按照惯例进行:要么您自己永远没有这样的返回值,要么总是设置一个变量/常量。