PHP作用域

变量作用域

  • 全局
    在函数外的变量都是 全局变量
  • 局部
    在函数内的变量都是 局部变量
  • 静态
  • 全局与局部作用域切换
    • 全局变量 不能直接在局部环境中使用
    • 局部变量 不能直接在全局环境中使用
    • 在局部环境中 使用全局变量, 需要通过 $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>';
 ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值