变量与常量
这篇讲 PHP 中两种基本的数据容器——变量和常量——的定义规则、作用域,以及 global / static 关键字的用法。
变量
变量是存储数据的容器,PHP 中变量以 $ 符号开头:
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>
变量命名规则
- 以
$符号开头,后跟变量名 - 变量名必须以字母或下划线开头,不能以数字开头
- 变量名只能包含字母、数字和下划线(
A-z、0-9、_) - 变量名严格区分大小写(
$name和$Name是两个不同的变量)
PHP 是弱类型语言
PHP 会根据赋值自动确定变量的数据类型,无需事先声明类型——这一点与 C、Java 等强类型语言不同:
<?php
$x = 5; // 整型
$x = "hello"; // 同一变量现在变成了字符串——这在 C/Java 中是不允许的
?>
变量作用域
PHP 有三种变量作用域:local(局部)、global(全局)、static(静态)。
局部与全局
- 函数外部声明的变量具有全局作用域,只能在函数外部访问
- 函数内部声明的变量具有局部作用域,只能在函数内部访问
<?php
$x = 5; // 全局变量
function myTest() {
$y = 10; // 局部变量
// 这里无法访问 $x
}
myTest();
// 这里无法访问 $y
?>
global 关键字
要在函数内部访问全局变量,使用 global 关键字:
<?php
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // 输出 15
?>
另一种方式是通过 $GLOBALS 数组:
<?php
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // 输出 15
?>
static 关键字
通常情况下,函数执行完毕后会删除其内部的所有变量。如果希望某局部变量在函数调用之间保持值,使用 static:
<?php
function myCounter() {
static $count = 0;
echo $count;
$count++;
}
myCounter(); // 输出 0
myCounter(); // 输出 1
myCounter(); // 输出 2
?>
static 变量仍然是函数的局部变量,外部无法访问。它只是"记住"了上次函数调用结束时的值。常量
常量是值不可改变的标识符。与变量不同,常量名前面没有 $ 符号,且自动全局生效。
使用 define() 定义常量:
<?php
define("GREETING", "Hello PHP!");
echo GREETING; // 输出 Hello PHP!
?>
define() 的三个参数:
- 常量名:字符串,通常全大写
- 常量值:可以是标量(字符串、数字等)
- 大小写不敏感(可选):默认
false,设为true时常量名不区分大小写(PHP 8.0 起已废弃)
常量一旦定义,脚本运行期间无法改变或取消。常量名通常用全大写加下划线(如
DB_HOST),这是 PHP 社区的约定。PHP 8.0 起建议弃用大小写不敏感的常量。一句话小结
变量以 $ 开头,弱类型、自动推断;函数内访问全局变量用 global 或 $GLOBALS;需要跨调用保留局部变量用 static。常量用 define() 定义,全大写命名,定义后不可更改。下一篇讲 数据类型。
最后更新于