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

PHP的变量作用范围

2016-07-29 12:04 876 查看
对于php中变量的使用,有些不习惯,作为初学菜鸟的我,老是犯错,现在总结了一下,有错的地方欢迎大家的指证。

      PHP 中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域。对于初学者来说,变量的作用域是它们所驻留的页面。因此,如果你定义了 $var,页面余下部分就可以访问 $var,但是,其它页面一般不能访问它(除非使用特殊的变量)。

      因为包含文件像它们是原始脚本的一部分那样工作,所以在 include() 那一行之前定义的变量可供包含文件使用。此外,包含文件内定义的变量可供 include() 那一行之后的父(包含)脚本使用。

      当使用你自己定义的函数时,所有这些都将变得不那么明显。这些函数具有它们自己的作用域,这意味着在一个函数内使用的变量不能在其外部使用,在一个函数外部定义的变量不能在其内部使用。由于这个原因,函数内部的变量可以具有与其外部的变量相同的名称,但是它们仍然是完全不同的变量,并且具有不同的值。对于大多数初级程序员来说,这是一个使人糊涂的概念。

     例如下面这个例子,代码是不能正常运行的:

<?php
$a=1;
function p(){
echo  $a;
}
p();
?>

而换个写法,就可以正常运行了,如下:

<?php
$a=1;
function p(){
echo $GLOBALS['a'];
}
p();
?>

     那么如果一定想要访问函数内部的变量我们可以怎么做了,用global语句改变函数内部变量的作用域。

想要在函数内部访问,可以利用超全局变量:$_GET、$_POST、$_REQUEST 等。这些变量在你的函数内是自动可访问的(因此,它们是超全局变量)。

也可以添加元素到$GLOBALS 数组中,使得可以在函数内使用它们。

   补充:

    在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.

1.    内置超级全局变量可以在脚本的任何地方使用和可见。即如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。

 

2.   常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面中就不能使用了。 

3.   在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。 

4.  函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。但最好不这么做,设计函数就是为了让功能独立出来,在函数内部定义了全局变量,就会让函数依赖上下文,避免这样使用。 

5.   在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。 

6.   在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。

超全局变的完整列表:

•.$GOBALS 所有全局变量数组

•.$_SERVER 服务器环境变量数组

•.$_POST 通过POST方法传递给该脚本的变量数组

•.$_GET 通过GET方法传递给该脚本的变量数组

•.$_COOKIE cookie变量数组

•.$_FILES 与文件上传相关的变量数组

•.$_ENV 环境变量数组

•.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容

•.$_SESSION 会话变量数组 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: