- PHP 菜鸟教程
- PHP - 教程
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 功能
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - echo 语句和 print 语句
- PHP - var_dump() 函数
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔术常量
- PHP – 数据类型
- PHP - 类型转换
- PHP - 类型戏法
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件和I/O
- PHP – 数学函数
- PHP - Heredoc & Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期和时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符类型
- PHP - 算术运算符示例
- PHP - 比较运算符示例
- PHP - 逻辑运算符示例
- PHP - 赋值运算符示例
- PHP – 字符串运算符
- PHP – 数组运算符
- PHP – 条件运算符示例
- PHP - Spread 运算符
- PHP - Null 合并运算符
- PHP - Spaceship 运算符
- PHP 控制语句
- PHP – 决策
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP – 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - do...While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 数组
- PHP - 数组
- PHP - 索引数组
- PHP - 关联数组
- PHP - 多维数组
- PHP - 数组函数
- PHP - 常量数组
- PHP 函数
- PHP - 函数
- PHP - 函数参数
- PHP - 按值调用
- PHP - 按引用调用
- PHP - 默认参数
- PHP - 命名参数
- PHP - 变量参数
- PHP - 返回值
- PHP - 传递函数
- PHP - 递归函数
- PHP - 类型提示
- PHP - 变量范围
- PHP - 严格类型
- PHP - 匿名函数
- PHP - 箭头( Arrow )函数
- PHP - 变量处理函数
- PHP - 局部变量
- PHP - 全局变量
- PHP 超全局变量
- PHP - 超全局变量
- PHP - $GLOBALS 变量
- PHP - $_SERVER 变量
- PHP - $_REQUEST 变量
- PHP - $_POST 变量
- PHP - $_GET 变量
- PHP - $_FILES 变量
- PHP - $_ENV 变量
- PHP - $_COOKIE 变量
- PHP - $_SESSION 变量
- PHP 文件处理
- PHP - 文件处理
PHP - 变量范围
PHP 变量的作用域是定义变量的上下文,并且可以在可访问的范围内访问变量。通常,没有任何循环或函数等的简单顺序 PHP 脚本只有一个作用域。在 “<?php” 和 “?>” 标签中声明的任何变量从定义开始在整个程序中都可用。
根据范围,PHP 变量可以是以下三种类型中的任何一种 -
主脚本中的变量也可用于与 include 或 require 语句合并的任何其他脚本。
例
在以下示例中,主脚本中包含 “test.php” 脚本。
main.php
<?php
$var=100;
include "test.php";
?>
test.php
<?php
echo "value of \$var in test.php : " . $var;
?>
执行主脚本时,它将显示以下输出 -
value of $var in test.php : 100
但是,当脚本具有用户定义的函数时,其中的任何变量都具有局部范围。因此,在函数内部定义的变量无法在外部访问。在函数外部(上面)定义的变量具有全局范围。
例
请看下面的例子 -
<?php
$var=100; // 全局变量
function myfunction() {
$var1="Hello"; // 局部变量
echo "var=$var var1=$var1" . PHP_EOL;
}
myfunction();
echo "var=$var var1=$var1" . PHP_EOL;
?>
它将产生以下输出 -
var= var1=Hello
var=100 var1=
PHP Warning: Undefined variable $var in /home/cg/root/64504/main.php on line 5
PHP Warning: Undefined variable $var1 in /home/cg/root/64504/main.php on line 8
var=100 var1=
PHP Warning: Undefined variable $var in /home/cg/root/64504/main.php on line 5
PHP Warning: Undefined variable $var1 in /home/cg/root/64504/main.php on line 8
请注意,全局变量不会自动在函数的局部范围内可用。此外,函数内部的变量在外部是不可访问的。
“global” 关键字
要在函数的 局部范围内启用对全局变量的访问,应该使用 “global” 关键字显式完成。
例
PHP 脚本如下 -
<?php
$a=10;
$b=20;
echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
function myfunction() {
global $a, $b;
$c=($a+$b)/2;
echo "inside function a = $a b = $b c = $c" . PHP_EOL;
$a=$a+10;
}
myfunction();
echo "Variables after function call: a = $a b = $b c = $c";
?>
它将产生以下输出 -
Global variables before function call: a = 10 b = 20
inside function a = 10 b = 20 c = 15
Variables after function call: a = 20 b = 20 c =
PHP Warning: Undefined variable $c in /home/cg/root/48499/main.php on line 12
inside function a = 10 b = 20 c = 15
Variables after function call: a = 20 b = 20 c =
PHP Warning: Undefined variable $c in /home/cg/root/48499/main.php on line 12
现在可以在函数内部处理全局变量。此外,对函数内部的全局变量所做的任何更改都将反映在全局命名空间中。
$GLOBALS 数组
PHP 将所有全局变量存储在一个名为 $GLOBALS 的关联数组中。变量的名称和值构成键值对。
例
在下面的 PHP 脚本中,$GLOBALS 数组用于访问全局变量 -
<?php
$a=10;
$b=20;
echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
function myfunction() {
$c=($GLOBALS['a']+$GLOBALS['b'])/2;
echo "c = $c" . PHP_EOL;
$GLOBALS['a']+=10;
}
myfunction();
echo "Variables after function call: a = $a b = $b c = $c";
?>
它将产生以下输出 -
Global variables before function call: a = 10 b = 20
c = 15
PHP Warning: Undefined variable $c in C:\xampp\htdocs\hello.php on line 12
Variables after function call: a = 20 b = 20 c =
c = 15
PHP Warning: Undefined variable $c in C:\xampp\htdocs\hello.php on line 12
Variables after function call: a = 20 b = 20 c =
静态变量
使用 static 关键字定义的变量不会在每次调用函数时初始化。此外,它保留了前一次调用的值。
例请看下面的例子 -
<?php
function myfunction() {
static $x=0;
echo "x = $x" . PHP_EOL;
$x++;
}
for ($i=1; $i<=3; $i++) {
echo "call to function :$i : ";
myfunction();
}
?>
它将产生以下输出 -
call to function :1 : x = 0
call to function :2 : x = 1
call to function :3 : x = 2
call to function :2 : x = 1
call to function :3 : x = 2