说我有......
function one($x){
return $a + $x;
}
function two(){
$a = 5;
echo one(3);
}
这会显示答案“8”还是“3”?换句话说,函数one会得到$ a的值还是我需要在某个地方声明它是全局的?
N.B。我还没有尝试过,但我在这里要求它理解为什么它会以某种方式发挥作用。
答案 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)
您不会获得8
或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
答案 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
?>