我遇到一个奇怪的问题,从include中返回一个数组。手册中的示例显示了我期望的行为:
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
// This is the expected behavior.
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>
我的用法scnario给出了不同的结果。我通过一个简单的include调用它来加载Zend_Config,它返回一个array():
的config.php
<?php
/*
* Configuration options loaded in Zend_Config
*/
return array(
'localDB' => array('serverName' => 'TESTDB',
'uid' => 'TESTUSER',
'pwd' => 'TESTPW',
'DB' => 'TESTDB'
),
);
// in the app I can call Zend_config somewhat like this ...
$configfile = 'config.php';
// zend_config takes an array as parameter, returned by the included file...
$config = Zend_config(include $config);
一切都很好。除了现在我想覆盖这个数组进行测试配置,而不更改文件,所以我这样做:
testConfig.php
$testsettings = include_once 'config.php';
// override the array
$testsettings['localDB']['serverName'] = "TEST";
//return the overriden array
return $testsettings;
现在,奇怪的部分。当我执行php -f testConfig.php和var_dump()$ testsettings时,一切正常。
但是如果我在测试用例中包含此文件以获得orverriden设置值,则结果始终为(bool)true,就像示例include包含在顶部而没有设置返回值。
我已经想到了一些解决方法,但是出于好奇,如果有人知道为什么会这样做,就会感到好奇。
答案 0 :(得分:3)
include_once
都会返回true
。这一行
$testsettings = include_once 'config.php';
如果您在早期代码中的任何位置包含$testsettings
,则将config.php
设置为true。
答案 1 :(得分:0)
也许它不是一个bool,而是数组的计数。
答案 2 :(得分:0)
它在文档中。查看处理退货 - http://us2.php.net/manual/en/function.include.php部分。但基本上 - 不要这样做。