PHP变量作用域

简介:

PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖,这可能引起一些问题,有些人可能不小心就改变了一个全局变量。PHP 中全局变量在函数中使用时必须声明为 global。
PHP: 变量范围 - Manual

全局变量

在函数范围之外所声明的变量就是全局变量。由于函数可以视为单独的程序片段,所以局部变量会覆盖全局变量的能见度,因此在函数中并无法直接调用使用全局变量。

局部变量

在函数之中声明的变量就是局部变量,并且该变量只有在函数范围之中才能加以使用。如果其它程序局部需要调用使用该变量值时,必须透过return指令,来将其传回至主程序区块以作后续处理。

函数内使用全局变量

1、通过传参方式将变量传入函数内部使用函数内部不能改变全局变量的值
可以在传参数时形参使用&符号与外部全局变量建立引用关系,这样可以更改全局变量的值。

$a=10;
function canshu($x){
    echo $x;
}

canshu($a);//输出10

2、通过global关键字声明一个与全局变量同名的局部变量需先声明后使用(实质上是建立了引用关系)此时在函数里面可以修改全局变量的值;unset后引用关系没有了,但外部全局变量依旧存在。

$a=10;

function quanju(){
    global $a;
    echo $a;
    unset($a);//unset后引用关系没有了,但外部全局变量依旧存在
    var_dump($a);//null
}

quanju();//输出10
echo '<br/>out:';
echo $a;//输出10

3、使用超全局数组GLOBALS
此时在函数里面可以修改全局变量的值;
unset后外部全局变量也不存在了。

$name='Bob';//全局变量$name也属于超全局数组GLOBALS的成员之一
echo '<pre>';
// print_r($GLOBALS);
echo '</pre>';

echo $GLOBALS['name'];


function chao(){
    echo $GLOBALS['name'];
    $GLOBALS['name']='Allen';//将改变外部全局变量$name的值
    unset($GLOBALS['name']);//将unset外部全局变量$name的值
}
echo '<br/>in:';
chao();//Bob

echo '<br/>out:';
var_dump($name);//null

静态变量(static)

PHP支持声明函数变量为静态的(static)。

一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化。

要声明函数变量为静态的用关键字static。通常,静态变量的第一次使用时赋予一个初始值。

函数内使用静态变量关键字static声明的变量在执行完函数后不会被释放,下一次函数调用仍然生效。

function add(){
    static $a=0;
    echo $a;
    $a++;
}

add();//0
echo "<hr/>";
add();//1
echo "<hr/>";
add();//2

UPDATE
2016-1-9 16:54:19

Javascript语言函数内部可以直接读取全局变量。

目录
相关文章
|
12月前
|
PHP
PHP 变量
PHP 变量
31 0
|
3月前
|
Linux PHP Windows
蓝易云 - php环境变量的配置步骤
以上就是配置PHP环境变量的步骤,希望对你有所帮助。
32 0
|
4月前
|
存储 PHP
【PHP入门】1.2-常量与变量
【PHP入门】1.2-常量与变量
【PHP入门】1.2-常量与变量
|
4月前
|
存储 PHP 容器
【PHP 开发专栏】PHP 基础语法与变量详解
【4月更文挑战第30天】本文概述了PHP的基础,包括脚本结构(&lt;?php至?&gt;标签)、注释(单行和多行)、数据类型(整型、浮点型、字符串型、布尔型、数组、对象)、运算符(算术、比较、逻辑)和流程控制(条件、循环语句)。还讨论了PHP变量的定义、作用域、类型转换及引用传递。了解这些基础知识对PHP编程至关重要,实践中不断学习和探索能提升Web开发技能。
44 2
|
4月前
|
存储 PHP 开发者
PHP变量命名规则
PHP变量命名规则
43 0
|
4月前
|
存储 数据处理 PHP
PHP变量类型
PHP变量类型
41 0
|
9月前
|
PHP Python
关于python变量的再次折腾,没有PHP的引用赋值
今天,重看php文档的时候,发现了这样的讲法
25 0