PHP函数变量范围

时间:2012-05-09 03:40:31

标签: php

说我有......

function one($x){
     return $a + $x;
}

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

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

N.B。我还没有尝试过,但我在这里要求它理解为什么它会以某种方式发挥作用。

4 个答案:

答案 0 :(得分:3)

没有任何功能one不了解$a。但这可以做到。

$a = 5;

function one($x){
 global $a;
 return $a + $x;
}

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

现在two()会回显8

答案 1 :(得分:1)

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

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

有关详细信息,请参阅PHP手册中的Variable Scope页面。

答案 2 :(得分:1)

您不会获得83。您将收到通知,因为$a尚未在函数one的范围内定义,并且您尝试阅读它:

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

答案 3 :(得分:1)

如果要使用与示例相近的类,请注意没有全局用法,只需分配变量$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
?>