变量与常量 #

一、变量 #

1.1 变量定义 #

PHP变量以 $ 符号开头,后跟变量名:

php
<?php
$name = "PHP";
$version = 8.2;
$isPopular = true;
$price = 99.99;

1.2 变量命名规则 #

  • $ 开头
  • 第二个字符必须是字母或下划线
  • 后续字符可以是字母、数字或下划线
  • 区分大小写
php
<?php
$validName = "正确";
$_valid_name = "正确";
$ValidName123 = "正确";

$123invalid = "错误";
$invalid-name = "错误";
$invalid.name = "错误";

1.3 命名规范 #

小驼峰命名(推荐):

php
<?php
$firstName = "John";
$lastName = "Doe";
$userAge = 25;
$totalPrice = 199.99;

蛇形命名:

php
<?php
$first_name = "John";
$last_name = "Doe";
$user_age = 25;

1.4 可变变量 #

变量名可以动态设置:

php
<?php
$var = "hello";
$$var = "world";

echo $hello;
echo $$var;

1.5 变量赋值 #

直接赋值:

php
<?php
$a = 10;
$b = "hello";

引用赋值:

php
<?php
$a = 10;
$b = &$a;

$a = 20;
echo $b;

链式赋值:

php
<?php
$a = $b = $c = 0;

二、变量作用域 #

2.1 局部变量 #

在函数内部定义的变量,只在函数内有效:

php
<?php
function test() {
    $local = "局部变量";
    echo $local;
}

test();

2.2 全局变量 #

在函数外部定义的变量,函数内需要使用 global 关键字访问:

php
<?php
$global = "全局变量";

function test() {
    global $global;
    echo $global;
}

test();

使用 $GLOBALS 数组:

php
<?php
$global = "全局变量";

function test() {
    echo $GLOBALS['global'];
}

test();

2.3 静态变量 #

使用 static 关键字,变量值在函数调用间保持:

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

counter();
counter();
counter();

2.4 超全局变量 #

PHP预定义的超全局变量,在任何地方都可访问:

变量 说明
$GLOBALS 全局变量数组
$_SERVER 服务器信息
$_GET GET请求参数
$_POST POST请求参数
$_REQUEST GET + POST + COOKIE
$_SESSION 会话变量
$_COOKIE Cookie变量
$_FILES 上传文件信息
$_ENV 环境变量
php
<?php
echo $_SERVER['PHP_SELF'];
echo $_SERVER['HTTP_HOST'];
echo $_SERVER['REQUEST_METHOD'];

三、常量 #

3.1 使用 define() 定义 #

php
<?php
define("SITE_NAME", "我的网站");
define("MAX_SIZE", 100);
define("IS_DEBUG", true);

echo SITE_NAME;
echo MAX_SIZE;

define() 可以在运行时定义,支持表达式:

php
<?php
define("VERSION", "1.0." . date('Y'));
define("CONFIG", [
    'host' => 'localhost',
    'port' => 3306
]);

3.2 使用 const 关键字 #

php
<?php
const PI = 3.14159;
const MAX_USERS = 100;

echo PI;
echo MAX_USERS;

const 在编译时定义,不能使用表达式:

php
<?php
const VERSION = "1.0";
const TIME = time();

3.3 类常量 #

php
<?php
class User
{
    const STATUS_ACTIVE = 1;
    const STATUS_INACTIVE = 0;
    const DEFAULT_ROLE = 'user';
    
    public function isActive(): bool
    {
        return $this->status === self::STATUS_ACTIVE;
    }
}

echo User::STATUS_ACTIVE;
echo User::DEFAULT_ROLE;

PHP 8.3+ 支持类型化类常量:

php
<?php
class Config
{
    const string APP_NAME = "MyApp";
    const int MAX_ITEMS = 100;
    const array DEFAULTS = ['theme' => 'light'];
}

3.4 define vs const #

特性 define() const
定义时机 运行时 编译时
条件定义 支持 不支持
表达式 支持 不支持
类常量 不支持 支持
命名空间 需要完整路径 自动使用当前命名空间
php
<?php
if (true) {
    define("CONST_A", 1);
    const CONST_B = 2;
}

3.5 常量命名规范 #

常量名使用大写字母和下划线:

php
<?php
define("MAX_FILE_SIZE", 1048576);
define("DB_HOST", "localhost");
const APP_VERSION = "2.0.0";
const DEFAULT_PAGE_SIZE = 20;

四、预定义常量 #

4.1 内核预定义常量 #

php
<?php
echo PHP_VERSION;
echo PHP_OS;
echo PHP_INT_MAX;
echo PHP_FLOAT_MAX;
echo PHP_EOL;
echo DIRECTORY_SEPARATOR;

4.2 魔术常量 #

php
<?php
echo __LINE__;
echo __FILE__;
echo __DIR__;
echo __FUNCTION__;
echo __CLASS__;
echo __METHOD__;
echo __NAMESPACE__;
echo __TRAIT__;

五、变量相关函数 #

5.1 检测变量 #

php
<?php
$name = "PHP";

if (isset($name)) {
    echo "变量已设置";
}

if (!isset($age)) {
    echo "变量未设置";
}

5.2 判断是否为空 #

php
<?php
$var = "";
$var2 = 0;
$var3 = null;
$var4 = [];
$var5 = "0";

if (empty($var)) {
    echo "变量为空";
}

以下值被认为是空:

  • "" (空字符串)
  • 0 (整数0)
  • "0" (字符串0)
  • null
  • false
  • [] (空数组)

5.3 销毁变量 #

php
<?php
$var = "value";
unset($var);

if (!isset($var)) {
    echo "变量已销毁";
}

5.4 检测常量 #

php
<?php
define("APP_NAME", "MyApp");

if (defined("APP_NAME")) {
    echo APP_NAME;
}

echo constant("APP_NAME");

六、变量类型判断 #

php
<?php
$var = 42;

echo gettype($var);

if (is_int($var)) {
    echo "是整数";
}

if (is_string($var)) {
    echo "是字符串";
}

常用类型检测函数:

函数 说明
is_int() 是否为整数
is_float() 是否为浮点数
is_string() 是否为字符串
is_bool() 是否为布尔值
is_array() 是否为数组
is_object() 是否为对象
is_null() 是否为null
is_numeric() 是否为数字或数字字符串
is_scalar() 是否为标量类型
is_callable() 是否为可调用结构

七、总结 #

本章学习了:

  • 变量的定义和命名规则
  • 变量作用域:局部、全局、静态
  • 超全局变量的使用
  • 常量的定义:define() 和 const
  • 预定义常量和魔术常量
  • 变量相关函数

下一章将学习PHP的基本数据类型。

最后更新:2026-03-26