从include返回值时出现奇怪的行为

时间:2011-05-27 20:41:26

标签: php

我遇到一个奇怪的问题,从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包含在顶部而没有设置返回值

我已经想到了一些解决方法,但是出于好奇,如果有人知道为什么会这样做,就会感到好奇。

3 个答案:

答案 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部分。但基本上 - 不要这样做。