0

说我有...

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

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

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

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

4

4 回答 4

2

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

$a = 5;

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

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

现在two()会回声8

于 2012-05-09T03:44:52.993 回答
1

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

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

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

于 2012-05-09T03:43:24.813 回答
1

你不会得到8or 3。您将收到一个通知,因为$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
于 2012-05-09T03:43:49.533 回答
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
?>
于 2012-05-09T04:11:42.647 回答