🧠 PHP 变量从零开始讲明白(小白也能看懂)

🧠 PHP 变量从零开始讲明白(小白也能看懂)


1️⃣ 什么是变量?

变量就像一个"盒子",你可以把数据放进去,然后通过名字找到它。

ini 复制代码
$name = "张三";
echo $name; // 输出:张三

变量名前面必须加 $,不能以数字开头,建议使用英文命名。


2️⃣ 变量的作用域(Scope)

作用域就是变量能被访问的范围。

✅ 全局作用域(Global Scope)

在函数外定义的变量,可以在脚本的大部分地方使用。

php 复制代码
$age = 25;

function showAge() {
    echo $age; // 报错!因为函数内部看不到全局变量
}

要访问全局变量,需要使用 global$GLOBALS

php 复制代码
function showAge() {
    global $age;
    echo $age; // 输出 25
}

✅ 局部作用域(Function Scope)

在函数内部定义的变量,外部无法访问。

php 复制代码
function sayHello() {
    $msg = "你好";
}

echo $msg; // 报错!局部变量不能在外部访问

✅ 静态作用域(Static Scope)

使用 static 关键字可以让变量在函数多次调用之间保留值。

scss 复制代码
function countVisit() {
    static $count = 0;
    echo $count;
    $count++;
}

countVisit(); // 输出 0
countVisit(); // 输出 1
countVisit(); // 输出 2

📌 注意:

  • 静态变量只初始化一次;
  • 从 PHP 8.3 开始,可以用函数初始化静态变量:
scss 复制代码
function foo() {
    static $num = sqrt(121); // 自 PHP 8.3 起合法
}

✅ 继承方法中的静态变量(PHP 8.1+)

从 PHP 8.1 开始,子类继承的方法和父类共享同一个静态变量:

scala 复制代码
class Foo {
    public static function counter() {
        static $count = 0;
        return ++$count;
    }
}

class Bar extends Foo {}

Foo::counter(); // 1
Bar::counter(); // 2 ← 和父类共享

3️⃣ 超全局变量(Superglobals)

这些变量在任何地方都可以访问 ,不需要 global

名称 描述
$GLOBALS 所有全局变量的引用
$_SERVER 服务器信息(如 IP、URL)
$_GET 接收 URL 中传递的数据(GET 请求)
$_POST 接收表单提交的数据(POST 请求)
$_FILES 接收上传文件的信息
$_REQUEST 包含 GET、POST、COOKIE 的合并数据
$_SESSION 存储用户登录状态等会话数据
$_ENV 获取环境变量
$_COOKIE 获取客户端 Cookie 数据

📌 这些变量都是数组形式,比如:

php 复制代码
echo $_SERVER['HTTP_HOST']; // 输出当前域名

4️⃣ 可变变量(Variable Variables)

可以将一个变量的值作为另一个变量的名字:

php 复制代码
$a = "hello";
$$a = "world"; // 相当于 $hello = "world"

echo $hello; // 输出 world
echo "$a {$hello}"; // 输出 hello world

5️⃣ 最佳实践建议

场景 推荐做法
想在函数中使用全局变量 使用 $GLOBALS 更安全
想让变量在函数多次调用间保留 使用 static
想跨类共享计数器 使用类的静态属性(private static $count
不要滥用 & 引用 容易造成悬空引用,影响稳定性

📄 附录:常见陷阱提醒

错误写法 问题 正确写法
global $var = &someFunc(); 局部变量销毁后引用失效 不要用引用赋值给 global
static $var = someFunc();(PHP < 8.3) 不允许动态表达式 升级到 PHP 8.3 后可用
$$a = "value" 如果 $a 是空或不可预测的,可能导致错误 确保 $a 有值再使用可变变量

📌 总结一句话:

PHP 的变量看似简单,但作用域、引用、静态变量、超全局变量等机制非常重要。掌握它们,才能写出健壮、稳定的代码。

相关推荐
Victor35613 分钟前
Netty(13)Netty中的事件和回调机制
后端
码事漫谈1 小时前
VS Code 1.107 更新:多智能体协同与开发体验升级
后端
码事漫谈1 小时前
从概念开始开始C++管道编程
后端
@淡 定1 小时前
Spring中@Autowired注解的实现原理
java·后端·spring
yong99902 小时前
基于C#与三菱FX5U PLC实现以太网通信
网络·c#·php
serendipity_hky2 小时前
【go语言 | 第2篇】Go变量声明 + 常用数据类型的使用
开发语言·后端·golang
疯狂的程序猴2 小时前
App Store上架完整流程与注意事项详解
后端
开心就好20252 小时前
把 H5 应用上架 App Store,并不是套个壳这么简单
后端
tirelyl3 小时前
LangChain.js 1.0 + NestJS 入门 Demo
后端