首页 / PHP 入门教程 / PHP 变量与常量

PHP 入门教程

PHP 变量与常量

本教程共 65 篇 · 第 5 篇 · 更新于 2026-07-24 · 约 4 分钟阅读

PHPPHP8变量常量作用域数据存储

5. PHP 变量与常量

本节目标:掌握变量的定义、作用域和常量的使用。学完你能正确声明变量,理解数据在程序中的存储方式。

5.1 什么是变量

变量是存储数据的容器。在 PHP 中,变量以美元符号 $ 开头:

<?php
$name = "张三";
$age = 25;
$price = 19.99;
?>

变量赋值后可以随时修改:

<?php
$count = 10;
$count = 20;  // 现在 $count 的值是 20
$count = $count + 5;  // 现在 $count 的值是 25
?>

5.2 变量命名规则

给变量起名需要遵守以下规则:

  1. 必须以 $ 符号开头
  2. 必须以字母或下划线开头,不能以数字开头
  3. 只能包含字母、数字和下划线
  4. 区分大小写
<?php
$username = "正确";     // 正确
$_private = "正确";     // 正确
$age2 = "正确";         // 正确

// $2age = "错误";      // 错误!不能以数字开头
// $user-name = "错误"; // 错误!不能包含横线
// $user name = "错误"; // 错误!不能包含空格
?>
Tip

变量名要有意义。$n 不如 $userName 清晰。推荐使用驼峰命名法($userName)或下划线命名法($user_name)。

5.3 变量作用域

变量的”可见范围”称为作用域。PHP 有四种作用域:

局部作用域

在函数内部定义的变量,只能在函数内部使用:

<?php
function sayHello() {
    $message = "你好";  // 局部变量
    echo $message;
}

sayHello();          // 输出"你好"
// echo $message;    // 错误!函数外访问不到
?>

全局作用域

在函数外部定义的变量,默认在函数内访问不到:

<?php
$siteName = "我的网站";

function showSite() {
    // echo $siteName;  // 错误!函数内访问不到
    global $siteName;   // 用 global 声明后就能访问
    echo $siteName;
}

showSite();
?>

使用 $GLOBALS 数组

<?php
$x = 10;
$y = 20;

function add() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

add();
echo $z;  // 输出 30
?>

静态变量

函数执行完毕后,普通变量会被销毁。使用 static 可以让变量保留值:

<?php
function counter() {
    static $count = 0;
    $count++;
    echo $count;
}

counter();  // 1
counter();  // 2
counter();  // 3
?>
Note

静态变量仍然是局部变量,函数外部无法访问。它只是值不会被销毁。

5.4 可变变量

PHP 允许用一个变量的值作为另一个变量的名:

<?php
$a = "hello";
$$a = "world";  // 相当于 $hello = "world"

echo $hello;    // 输出 world
echo $$a;       // 同样输出 world
?>
Tip

可变变量在动态编程中有用,但过度使用会降低代码可读性。初学者了解即可,不建议频繁使用。

5.5 常量

常量一旦定义,值就不能改变。PHP 定义常量有两种方式:

define() 函数(传统方式)

<?php
define("SITE_NAME", "我的博客");
define("MAX_SIZE", 100);
define("PI", 3.14159);

echo SITE_NAME;  // 输出"我的博客"
?>

const 关键字(推荐)

<?php
const SITE_NAME = "我的博客";
const MAX_SIZE = 100;

// const 可以在类中使用,define() 不行
class Config {
    const VERSION = "2.0";
}

echo Config::VERSION;  // 输出 2.0
?>
Note

const 在编译时定义,define() 在运行时定义。PHP 8.0 起两者性能差距很小,推荐优先使用 const,因为它语法更简洁且在类中可用。

5.6 常量命名规则

  • 通常全部大写,单词间用下划线分隔
  • 不需要 $ 符号
  • 定义后不能修改,不能删除
<?php
const DATABASE_HOST = "localhost";
const DATABASE_PORT = 3306;
?>

5.7 预定义常量

PHP 内置了许多常用常量:

<?php
echo PHP_VERSION;      // PHP 版本,如 8.5.8
echo PHP_OS;           // 操作系统名称
echo PHP_INT_MAX;      // 最大整数值
echo __LINE__;         // 当前行号
echo __FILE__;         // 当前文件路径
echo __DIR__;          // 当前文件所在目录
?>

更多魔术常量将在第 17 章详细介绍。

5.8 变量与常量的选择

什么时候用变量,什么时候用常量?

场景选择
运行中会改变的值变量
配置项、固定参数常量
需要在多处使用且不改变常量
计算结果、临时数据变量
<?php
// 常量:数据库配置,不会变
const DB_HOST = "localhost";
const DB_NAME = "mydb";

// 变量:用户输入,每次不同
$username = $_POST['username'];
$password = $_POST['password'];
?>

来源:参考了 w3cschool「PHP 变量」「PHP 常量」、runoob「PHP 变量」「PHP 常量」以及 php.net 官方文档,综合改写后所得。