为什么php变量范围不起作用

时间:2013-03-01 19:33:16

标签: php

我执行了以下代码,但php说:

Notice: Undefined variable: b in ..\..\..\demo.php on line 4 
Notice: Undefined variable: a in ..\..\..\demo.php on line 4

Php代码:

<?php
  $a='a';$b='b';
  function test(){
      echo $a.$b;
  }
  test(); // error
?>

但是我把代码更改为:

<?php
  $a='a';$b='b';
  function test($a,$b){
      echo $a.$b;
  }
  test($a,$b); // ab
?>

为什么$a$b在第一种情况下未定义,因为我之前定义过它们? 为什么参数需要在php中传递?在JavaScript之类的其他内容中不需要它。

3 个答案:

答案 0 :(得分:2)

如果在函数外定义变量,则需要指定global关键字。如:

<?php
$a='a';$b='b';
function test(){
    global $a, $b;
    echo $a.$b;
}
test(); // error
?>

但是你的第二个例子是推荐的处理方式,通常是。

答案 1 :(得分:1)

您提供的第一个示例中的$ a和$ b分别尝试从本地范围而不是全局范围访问这些变量。您可以尝试像这样声明它们

 function test() {
     global $a, $b;
     echo $a . $b; //or $GLOBALS['a'].$GLOBALS['b'];
 }

您将获得正确的值。

答案 2 :(得分:0)

试试这个

$a = '101';
$func = function() use($a) {
    echo $a;
};

function func_2() {
    global $func;
    $a = 'not previouse a';
    $func();
}

func_2();