我在名为config.php的文件中有以下行:
$objects["settings"]["template"]["value"] = "yes";
然后是一个名为funcs.php的文件,其中包含config.php,包含以下行。
echo $objects["settings"]["template"]["value"];
function testfunction() {
echo "<br />function output: ".$objects["settings"]["template"]["value"];
}
然后我有index.php,其中包括funcs.php,如下所示。
require_once("funcs.php");
testfunction();
为什么函数的输出没有读取变量并且它们是空的?
yes
function output:
我期待的输出是:
yes
function output: yes
提前致谢。
编辑:我选择了Yoda的答案,因为这是关于将$对象作为参数传递的最详细答案。感谢所有回答的人!
答案 0 :(得分:2)
只需将对象作为参数
传递function testfunction($objects) {
echo "<br />function output: ".$objects["settings"]["template"]["value"];
}
答案 1 :(得分:1)
变量超出了函数的范围。要使函数中的变量可用,您必须传递一个参数到函数中。您还需要修改函数定义。见下面的示例
// function definition
function testFunction($variable) {
echo $variable;
}
// call the function
$your_variable = "Some output";
testFunction($your_variable);
这应该会给你预期的行为。
答案 2 :(得分:1)
变量不在函数范围内。您可以使用global
关键字来实现这一目标。但是这样做是不好的做法,你应该通过函数参数将值传递给函数。
使用global
(不良做法):
$objects["settings"]["template"]["value"] = "yes";
function testfunction() {
global $objects;
echo "<br />function output: ".$objects["settings"]["template"]["value"];
}
testfunction();
通过函数参数传递值:
$objects["settings"]["template"]["value"] = "yes";
function testfunction($objects) {
echo "<br />function output: ".$objects["settings"]["template"]["value"];
}
testfunction($objects);
答案 3 :(得分:-1)
使用全局可以工作,但只有在你不能通过函数传递变量时才应该使用它,因为它有一些安全风险......
$GLOBALS["settings"]["template"]["value"] = 'yes';
这是有效的,因为它将变量的范围更改为全局。
$GLOBALS["settings"]["template"]["value"] = 'yes';
function test(){
echo $GLOBALS["settings"]["template"]["value"];
}
test();
以上打印出yes