函数内的数组问题

时间:2011-03-07 22:31:57

标签: php scope

我有:

<?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)时,它不起作用。

为什么会这样?

4 个答案:

答案 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“超出范围”。除非作为参数特别传入,否则函数无权访问在其外部声明的变量。

请参阅PHP variable scope

您可以通过global关键字授予功能访问权限:

$a = array();

function myFunc() {
   global $a;
   // do something with $a here
}

...但请注意,全局变量的使用通常被认为是不好的做法,并且是frowned upon

答案 3 :(得分:0)

除非你声明它们,否则PHP不能在函数内部使用全局变量:

function func($c)
{
  global $a;
  # The rest of the code.
}