Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么php变量作用域在函数中不起作用_Php - Fatal编程技术网

为什么php变量作用域在函数中不起作用

为什么php变量作用域在函数中不起作用,php,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说:

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
的应用程序中不需要它

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

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


但第二个示例是推荐的处理方法,通常。

如果变量是在函数外部定义的,则需要指定
全局
关键字。例如:

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


但您的第二个示例是推荐的处理方法,通常。

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

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

您将获得正确的值。

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

 function test() {
     global $a, $b;
     echo $a . $b; //or $GLOBALS['a'].$GLOBALS['b'];
 }
您将得到正确的值。

试试这个

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

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

func_2();
试试这个

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

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

func_2();

添加
全局$a,$b在第一个函数中,它将工作:)PHP和Javascript不遵循相同的范围规则。参见添加
global$a,$b在第一个函数中,它将工作:)PHP和Javascript不遵循相同的范围规则。看见