全局范围允许您在函数外部定义的函数中使用变量。例如
$a=1;
function $test(){
echo $a;
}
//outputs 1
但为什么如果我用数组定义一个变量,我不能以同样的方式使用它?
$test = array(
0=>'zero',
1=>'one',
2=>'two',
3=>'three',
);
function doesntWork($something){
echo "My favorite number is " . $test[$something];
}
//outputs My favorite number is 0
如何将数组传递给函数,而不必将数组重新复制到函数本身。
任何解释都将不胜感激 感谢
答案 0 :(得分:4)
脚本#1不正确。它既不起作用(函数** $ ** test(){...}),也不输出“1”。和全局变量是不好的做法。将它们包装在一个类中与它无关。 类不是与面向对象无关的随机问题的解决方案。
只需传递$ a作为参数:
<?php
$a=1;
function test($foo) {
echo 'number ' . $foo;
};
test($a);
// -> "number 1".
?>
脚本#2:
<?php
$test = array(
0=>'zero',
1=>'one',
2=>'two',
3=>'three',
);
function doesntWork($test, $something){
echo "My favorite number is " . $test[$something];
}
doesntWork($test, mt_rand(0,3));
?>
答案 1 :(得分:3)
你的第一个例子不应该输出1.在特定函数中使变量全局化的唯一方法是使用如下的global关键字:
function test() {
global $a;
echo $a;
}
function doesWork($something) {
global $test;
echo "My favorite number is " . $test[$something];
}
此处有更多信息:http://ca2.php.net/manual/en/language.variables.scope.php
答案 2 :(得分:0)
PHP没有隐式的全局范围;您必须使用global关键字来访问“全局”变量。
$ a输出1可能是由于PHP对变量的可疑处理错综复杂。