我有:
<?php
$a=array('x'=>3,'y'=>6,'z'=>12); //NOTE THIS*** position 1
echo func(5);
function func($c)
{
$a = array('x'=>3,'y'=>6,'z'=>12); //NOTE THIS*** position 2
$previous = null;
foreach($a as $k => $v)
{
if($v > $c) // This part was unclear, so it could be >= instead
{
return $previous;
}
$previous = $k;
}
return $previous;
}
现在,当我在函数(位置2)中有数组$ a时,它的工作完美。但是,当我将$ a放在函数外(位置1)时,它不起作用。
为什么会这样?
答案 0 :(得分:2)
函数只能访问其范围内的数据。
$ a在位置1中定义的是在全局范围内,如果要在函数中访问它,则需要将其作为参数传递给函数。
或者您可以在函数
中添加该行global $a;
将$ a从全球范围带入当前范围。
从PHP文档中读取Variable Scope。
答案 1 :(得分:2)
这与PHP中的变量范围有关。您可以在此处查看:http://php.net/manual/en/language.variables.scope.php
在位置1中声明$ a使其成为全局。在您想要访问它的方式中,您需要使用global
关键字:global $a;
答案 2 :(得分:1)
第一位的$a
“超出范围”。除非作为参数特别传入,否则函数无权访问在其外部声明的变量。
您可以通过global
关键字授予功能访问权限:
$a = array();
function myFunc() {
global $a;
// do something with $a here
}
...但请注意,全局变量的使用通常被认为是不好的做法,并且是frowned upon。
答案 3 :(得分:0)
function func($c)
{
global $a;
# The rest of the code.
}