变量作用域
- 全局
在函数外的变量都是 全局变量 - 局部
在函数内的变量都是 局部变量 - 静态
- 全局与局部作用域切换
- 全局变量 不能直接在局部环境中使用
- 局部变量 不能直接在全局环境中使用
- 在局部环境中 使用全局变量, 需要通过
$GLOBALS
超全局"数组" 来调用 全局变量
格式:
$GLOBALS['全局变量名']
注意: 全局变量名不要带 $ 符 - 在全局环境中 使用局部变量
首先, 在局部环境中先通过global
来修饰局部变量
然后, 才能在 全局环境中使用 局部变量(被global
修饰过的变量)
<?php
$b = 500; # 全局变量
function demo()
{
$a = 100; # 局部变量
}
echo '<hr>';
// function demo2()
// {
// echo $a;
// $x = 200;
// }
// $a = 100;
// demo2();
// echo $x;
function demo3()
{
echo $GLOBALS['a'];
global $y;
$y = 500;
echo $y;
}
$a = 100;
demo3();
echo $y;
?>
常量作用域
函数外定义的常量, 可以直接在函数内使用的
不能直接在函数内定义常量
<?php
const DDS = '小明';
demo();
function demo()
{
echo DDS;
}
echo '<hr>';
function demo2()
{
const NAME = '小猫';
}
demo2();
?>
静态变量
在函数结束时, 普通局部变量会在函数结束时, 被unset掉
静态变量在函数结束时, 保留该变量, 不会从内存中消失, 但依旧不能在全局作用域中使用.
当再次调用 "此函数"时, 静态变量将不再重新定义, 直接获取上一次的静态值
<?php
function demo()
{
static $a = 10;
$b = 50;
$a++;
$b++;
echo $a;
echo '<br>';
echo $b;
echo '<hr>';
}
demo();
demo();
demo();
demo();
demo();
echo '<hr>';
function demo2()
{
static $x = 10;
$x++;
echo $x;
echo '<hr>';
}
function demo3()
{
static $x = 50;
$x++;
echo $x;
echo '<hr>';
}
demo2();
demo2();
demo3();
demo2();
?>
函数技巧
可变函数: 将一个变量的值 作为另一个函数名来使用
引用函数
<?php
// 可变函数
// demo();
$a = 'demo';
$a(); # demo()
function demo()
{
echo "该函数名为: demo <br>";
}
function demo2($x, $y) # $x, $y 要接收的值
{
$x++;
$y++;
echo '$x = '. $x .'<br>';
echo '$y = '. $y .'<br>';
}
$a = 100;
$b = 200;
demo2($a, $b); # 传值
echo '$a = '. $a .'<br>';
echo '$b = '. $b .'<br>';
// 引用函数
function demo3($x1, &$y1) # $y1 要接收的是 内存地址
{
$x1++;
$y1++;
echo '$x1 = '. $x1 .'<br>';
echo '$y1 = '. $y1 .'<br>';
}
$a1 = 100;
$b1 = 200;
demo3($a1, $b1); # $b1 传址
echo '$a1 = '. $a1 .'<br>';
echo '$b1 = '. $b1 .'<br>';
?>