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

相关推荐
寻月隐君2 小时前
Rust 实战:从零构建一个多线程 Web 服务器
后端·rust·github
Livingbody2 小时前
FastMCP In Action之 Server详解
后端
GetcharZp3 小时前
C++ Boost 从入门到精通:让你的代码飞起来
c++·后端
北'辰4 小时前
DeepSeek智能考试系统智能体
前端·后端·架构·开源·github·deepseek
hrrrrb4 小时前
【Spring Boot 快速入门】八、登录认证(二)统一拦截
hive·spring boot·后端
钢铁男儿4 小时前
C# 异步编程:提升程序性能与用户体验的利器
c#·php·ux
_風箏6 小时前
OpenSSH【安装 03】远程代码执行漏洞CVE-2024-6387修复(cp: 无法创建普通文件“/usr/sbin/sshd“:文本文件忙问题处理)
后端
用户89535603282206 小时前
Gin 框架核心架构解析
后端·go
我是哪吒6 小时前
分布式微服务系统架构第164集:架构懂了就来了解数据库存储扩展千亿读写
后端·面试·github
UrbanJazzerati6 小时前
PowerShell 自动化实战:自动化为 Git Staged 内容添加 Issue 注释标记
后端·面试·shell