我在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)”。我可以对此进行测试,但是有更好的方法吗?为什么我会看到这些意外的结果?
答案 0 :(得分:2)
根据manual,这是预期的行为:默认情况下,包含的文件始终具有返回值(FALSE
与1
),可以使用return
覆盖它。你自己。
注意范围:所包含文件的return
(无论是隐式还是显式)都不会成为其包含位置(即您的函数)的return
。尽管在大多数情况下都包含替换,但替换例外适用(其中一个是:包含的文件必须再次以<?php
开头,而不是已经自动假定为PHP;另一个是return
仅寻址文件(包括),而不是结果)。
要解决您的其他问题(区分PHP的1
默认返回值和您自己引起的返回值)应该按照惯例进行:要么您自己永远没有这样的返回值,要么总是设置一个变量/常量。