您的位置:首页 > 编程语言 > PHP开发

PHP变量作用域

2015-03-20 09:44 281 查看
花括号

很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。

01
<?php
02
if
(True)
{
03
$a
=
'var
a'
;
04
}
05
06
var_dump(
$a
);
07
08
for
(
$i
=
0;
$i
<
1;
$i
++)
{
09
$b
=
'var
b'
;
10
for
(
$i
=
0;
$i
<
1;
$i
++)
{
11
$c
=
'var
c'
;
12
}
13
var_dump(
$c
);
14
}
15
16
var_dump(
$b
);
17
var_dump(
$c
);
18
?>
运行结果是:

1
string(5)
"var
a"
string(5)
"var
c"
string(5)
"var
b"
string(5)
"var
c"
可见if和for的花括号并无构成新的作用域。

而函数:

1
<?php
2
function
test()
{
3
$test
=
'var
test'
;
4
}
5
6
test();
7
var_dump(
$test
);
8
?>
结果是:

1
NULL
global关键字

PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。

执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。

global关键字无论在哪层,所引用的都是全局域的变量。

01
<?php
02
$test
=
'global
test'
;
03
function
a()
{
04
$test
=
'test
in a()'
;
05
function
b()
{
06
global
$test
;
07
var_dump(
$test
);
08
}
09
b();
10
}
11
12
a();
13
?>
执行结果是:

1
string(11)
"global
test"
闭包

闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。

01
<?php
02
function
a()
{
03
$test
=
'test
in a()'
;
04
function
b()
{
05
var_dump(
$test
);
//
$test不能被访问
06
$varb
=
'varb
in b()'
;
07
}
08
09
b();
10
var_dump(
$varb
);
//
$varb也不能被访问
11
}
12
13
a();
14
?>
执行结果:

1
NULL
NULL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: