PHP变量作用域(花括号、global、闭包)
2016-07-14 13:00
656 查看
花括号
很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。
运行结果是:
可见if和for的花括号并无构成新的作用域。
而函数:
结果是:
global关键字
PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。
执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。
global关键字无论在哪层,所引用的都是全局域的变量。
执行结果是:
闭包
闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。
执行结果:
延伸阅读:
variable scope: http://www.php.net/manual/en/language.variables.scope.php
php rfc closures:http://wiki.php.net/rfc/closures
很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。
<?php if (True) { $a = 'var a'; } var_dump($a); for ($i = 0; $i < 1; $i++) { $b = 'var b'; for ($i = 0; $i < 1; $i++) { $c = 'var c'; } var_dump($c); } var_dump($b); var_dump($c); ?>
运行结果是:
string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"
可见if和for的花括号并无构成新的作用域。
而函数:
<?php function test() { $test = 'var test'; } test(); var_dump($test); ?>
结果是:
NULL
global关键字
PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。
执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。
global关键字无论在哪层,所引用的都是全局域的变量。
<?php $test = 'global test'; function a() { $test = 'test in a()'; function b() { global $test; var_dump($test); } b(); } a(); ?>
执行结果是:
string(11) "global test"
闭包
闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。
<?php function a() { $test = 'test in a()'; function b() { var_dump($test); // $test不能被访问 $varb = 'varb in b()'; } b(); var_dump($varb); // $varb也不能被访问 } a(); ?>
执行结果:
NULL NULL
延伸阅读:
variable scope: http://www.php.net/manual/en/language.variables.scope.php
php rfc closures:http://wiki.php.net/rfc/closures
相关文章推荐
- 获取PHP文件绝对地址$_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
- 【转】搞不清FastCgi与php-fpm之间是个什么样的关系?
- 如何设置phpMyAdmin自动登录和取消自动登录
- php的引用
- PHP获取上周、本周、上月、本月、本季度、上季度时间方法大全
- 签名算法PHP和Java的不同实现
- php-fpm打开错误日志的配置
- Yii的Srbac插件用法详解
- PHP超全局变量$_ENV详解,及$_ENV为空的可能原因
- PHP变量入门教程(4)PHP 的外部变量
- PHP变量入门教程(3)global 关键字
- PHP变量入门教程(2)超全局变量,总共9个
- PHP Smarty增删改查(考试题库)
- PHP变量入门教程(1)基础
- 【很变态】PHP类实例化对象竟然可以访问类的“静态(static)方法”!!!
- 【转】记录PHP、MySQL在高并发场景下产生的一次事故
- PHP 操作 MySQL 执行数据库事务
- PHP返回32位与16位的md5加密值
- PhpStorm 8.x/9.x 快捷键设置/个性化设置,如何多项目共存?如何更换主题?
- Yii2使用Cookie的注意事项