PHP 函数变量范围


PHP functions variables scope

假设我有...

function one($x){
     return $a + $x;
}
function two(){
     $a = 5;
     echo one(3);
}

这会显示答案"8"还是"3"?换句话说,函数 1 会获得 $a 的值,还是我需要在某个地方声明它是全局的?

:注:我还没有尝试过,但我在这里问它以了解为什么它以一种或另一种方式起作用。

没有函数one不知道$a。但这是可以做到的。

$a = 5;
function one($x){
 global $a;
 return $a + $x;
}
function two(){
 global $a;
 $a = 5;
 echo one(3);
}

现在two()会附和8

函数不是调用它们的函数固有的作用域。(默认情况下,它们也不会继承全局变量 - 这就是 global 关键字的用途。

因此,$a one()内部将完全未定义,您将收到有关它的通知。

有关更多详细信息,请参阅 PHP 手册中的变量作用域页面。

你不会得到83。您将收到一个通知,因为尚未在函数 one 的作用域中定义$a,并且您尝试读取它:

PHP Notice:  Undefined variable: a in - on line 3
PHP Stack trace:
PHP   1. {main}() -:0
PHP   2. two() -:11
PHP   3. one() -:8

如果你使用一个与你的示例一样接近的类, 请注意没有全局用法,只需分配变量 $this->* 然后类及其方法/函数中有全局范围,您也可以从类外部访问它们,如$functions->a

<?php 
Class functions{
    function one($x){
        return $this->a + $x;
    }
    function two(){
        $this->a = 5;
        echo $this->one(3);
    }
}
$functions  = new functions();
$functions->two(); //8
echo $functions->a;//5
?>