PHP变量作用域的思考!
2010-01-29 16:05
225 查看
在PHP脚本中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等等,我们在使用它们的时候除了要正确地知道它们的语法以外,更重要的是,我们要知道它们在本质上的区别与联系—即它们的作用域的问题。
1.内置超级全局变量可以在脚本的任何地方使用和可见。即是说,如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。
2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面之中就不能使用了。
3.在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。
4.函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。
5.在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。
6.在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
1. 类内能使用什么样常量、变量或函数呢?
1) 类内使用的函数必须在实例化该类的文件中有定义(在实例化类前和类后定义都行)。
2) 类内只有通过$_GLOBAL["varName"]才能访问全局作用域中的变量,但这样会使类的使用受很大的限制。(不推荐使用类外自定域的变量)
3) 超级全局变量、预定义常量在类内能够正常访问。
4) 在实例化类之前自定义的常量在类内也能正常使用...
-------------------------------------------------------------------------------------------------------------
2. 为什么在PHP脚本中能访问超级全局变量和预定义常量呢?
PHP解释引擎在进行脚本解析时,首先根据web服务器提供的信息和具体的环境创建这些超级全局变量和预定义常量。不同的环境(如:扩展库不同),创建的预定义变量可能不一样。因此能在接下来的脚本任何位置访问这些变量和常量。
--------------------------------------------------------------------------------------------------------------
3. 怎么理解函数内部的变量?
1) 函数内部一般变量(包括形参),是local作用域。即在函数外部无法访问。
2) 加上global关键字定义的变量: global $userName = "root" 其实该语句等效于 $userName =
&$_GLOBAL["userName"]; $userName =
"root"。因此通过global关键字定于的函数内变量在函数内和函数外都能访问。
3) 加上static关键字定于的变量: 作用域为local, 但能在多次函数调用中一直保持它的值。
function update_counter ( ) {
static $counter = 0; //在第二...N次调用该函数时$counter不会再赋值为0
$counter++;
echo "Static counter is now $counter<br />";
}
--------------------------------------------------------------------------------------------------------
4. 类、函数、变量和常量哪些是要求先定义了才能被使用的?
一般的函数 (条件定义或嵌套定义的函数除外)和类不要求先定义在使用, 只需在调用函数或实例化该类的脚本中有定义就行。
变量在使用前应该先定义和赋值,不然得到的将会是默认的值(根据使用的环境而定)。
常量如果在使用前为被定于将被解释成相关的字符串.如 VALUE 将被看成字符串 "VALUE"
---------------------------------------------------------------------------------------------------------
5. require/include/require_once/include_once使脚本作用域更复杂但有着无可替代的作用
当PHP引擎遇到require等时,语法解析器在目标文件开头脱离PHP模式进入HTML模式在目标文件结尾恢复。require等导入文件与直接把文件复制到该处作用域形式一致...
1.内置超级全局变量可以在脚本的任何地方使用和可见。即是说,如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。
2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面之中就不能使用了。
3.在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。
4.函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。
5.在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。
6.在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
1. 类内能使用什么样常量、变量或函数呢?
1) 类内使用的函数必须在实例化该类的文件中有定义(在实例化类前和类后定义都行)。
2) 类内只有通过$_GLOBAL["varName"]才能访问全局作用域中的变量,但这样会使类的使用受很大的限制。(不推荐使用类外自定域的变量)
3) 超级全局变量、预定义常量在类内能够正常访问。
4) 在实例化类之前自定义的常量在类内也能正常使用...
-------------------------------------------------------------------------------------------------------------
2. 为什么在PHP脚本中能访问超级全局变量和预定义常量呢?
PHP解释引擎在进行脚本解析时,首先根据web服务器提供的信息和具体的环境创建这些超级全局变量和预定义常量。不同的环境(如:扩展库不同),创建的预定义变量可能不一样。因此能在接下来的脚本任何位置访问这些变量和常量。
--------------------------------------------------------------------------------------------------------------
3. 怎么理解函数内部的变量?
1) 函数内部一般变量(包括形参),是local作用域。即在函数外部无法访问。
2) 加上global关键字定义的变量: global $userName = "root" 其实该语句等效于 $userName =
&$_GLOBAL["userName"]; $userName =
"root"。因此通过global关键字定于的函数内变量在函数内和函数外都能访问。
3) 加上static关键字定于的变量: 作用域为local, 但能在多次函数调用中一直保持它的值。
function update_counter ( ) {
static $counter = 0; //在第二...N次调用该函数时$counter不会再赋值为0
$counter++;
echo "Static counter is now $counter<br />";
}
--------------------------------------------------------------------------------------------------------
4. 类、函数、变量和常量哪些是要求先定义了才能被使用的?
一般的函数 (条件定义或嵌套定义的函数除外)和类不要求先定义在使用, 只需在调用函数或实例化该类的脚本中有定义就行。
变量在使用前应该先定义和赋值,不然得到的将会是默认的值(根据使用的环境而定)。
常量如果在使用前为被定于将被解释成相关的字符串.如 VALUE 将被看成字符串 "VALUE"
---------------------------------------------------------------------------------------------------------
5. require/include/require_once/include_once使脚本作用域更复杂但有着无可替代的作用
当PHP引擎遇到require等时,语法解析器在目标文件开头脱离PHP模式进入HTML模式在目标文件结尾恢复。require等导入文件与直接把文件复制到该处作用域形式一致...
相关文章推荐
- php变量作用域
- php和lua的变量作用域
- php学习之一(变量,作用域,echo,print)
- 谈谈php变量作用域
- php 变量作用域出现的问题
- php闭包中使用use声明变量的作用域实例分析
- PHP常量、变量作用域详解(一)
- php和python 中变量作用域的解析
- python变量作用域的一点思考
- php中include文件变量作用域的研究
- PHP 变量作用域
- 深入理解PHP原理之变量作用域(Scope in PHP)
- php变量作用域 总结
- 浅析php中常量,变量的作用域和生存周期
- [转]PHP变量的声明及其作用域&静态变量
- PHP中变量的作用域
- php理解变量的作用域
- PHP变量作用域
- javascript的变量作用域--对比js、php和c的for循环
- PHP 变量作用域