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

相关推荐
Q_Q51100828532 分钟前
python基于web的汽车班车车票管理系统/火车票预订系统/高铁预定系统 可在线选座
spring boot·python·django·flask·node.js·汽车·php
AntBlack35 分钟前
虽迟但到 :盘一盘 SpringAI 现在发展得怎么样了?
后端·spring·openai
ss2731 小时前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
WordPress学习笔记2 小时前
安装WordPress时没生成wp-config.php的解决方法
php·wp-config
舒一笑2 小时前
🚀 PandaCoder 2.0.0 - ES DSL Monitor & SQL Monitor 震撼发布!
后端·ai编程·intellij idea
Java中文社群2 小时前
服务器被攻击!原因竟然是他?真没想到...
java·后端
浪裡遊2 小时前
Nivo图表库全面指南:配置与用法详解
前端·javascript·react.js·node.js·php
helloworddm3 小时前
Orleans 流系统握手机制时序图
后端·c#
开心-开心急了4 小时前
Flask入门教程——李辉 第三章 关键知识梳理
后端·python·flask
Code blocks5 小时前
GB28181视频服务wvp部署(一)
java·spring boot·后端