说我有...
function one($x){
return $a + $x;
}
function two(){
$a = 5;
echo one(3);
}
这会显示答案“8”还是“3”?换句话说,函数一个会获得 $a 的值还是我需要在某个地方声明它是全局的?
注意我还没有尝试过,但我在这里问它为什么它会以一种或另一种方式起作用。
说我有...
function one($x){
return $a + $x;
}
function two(){
$a = 5;
echo one(3);
}
这会显示答案“8”还是“3”?换句话说,函数一个会获得 $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
or 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
如果您使用与您的示例一样接近的类,请注意没有全局用法,只需分配您的变量,$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
?>