假设我有...
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 手册中的变量作用域页面。
你不会得到8
或3
。您将收到一个通知,因为尚未在函数 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
?>