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

相关推荐
canonical_entropy4 分钟前
可逆计算的方法论来源
后端·低代码
数据知道21 分钟前
【Flask】一文掌握 Flask 基础用法
数据库·后端·python·flask·python web
q***735524 分钟前
windows配置永久路由
android·前端·后端
码事漫谈43 分钟前
不懂汇编的后端不是一个好的开发
后端
码事漫谈1 小时前
AI时代,汇编语言还有必要学吗?我的惨痛教训与思考
后端
考虑考虑1 小时前
jpa将SQL记录到日志文件
spring boot·后端·spring
n***29321 小时前
PHP安全编程实践
开发语言·安全·php
踏浪无痕2 小时前
准备手写Simple Raft(二): 跑通最基本的Leader选举
后端·raft
d***9352 小时前
【Spring】Cookie和Session是什么
java·后端·spring
b***74882 小时前
PHP在电子商务系统中的构建
开发语言·php