编程说白了就是处理数据。用户输入的信息、数据库查出来的记录、计算过程中的中间结果,都得找个地方存起来。这个“地方”就是变量。
PHP是动态类型语言(dynamically typed language),这点跟Java、C#不一样。你不需要提前声明变量是什么类型,PHP会根据你赋的值自动推断。写起来省事,但也要心里有数——类型会随赋值变化。
一、PHP变量能存哪些数据类型?
| 类型 | 示例 | 说明 |
|---|---|---|
| 整数(Integer) | 10, -5, 1000 | 不带小数点的整数 |
| 浮点数(Float) | 14.99, -0.5 | decimal数值 |
| 字符串(String) | "代码号教程" | 文本数据,引号包起来 |
| 布尔(Boolean) | true / false | 条件判断专用 |
| 数组(Array) | ["PHP", "JS", "Python"] | 多个值放一个变量里 |
| 对象(Object) | new User() | 类的实例,包含属性和方法 |
二、变量命名规则(记牢这4条)
PHP变量必须以$符号开头,后面跟变量名。
硬性规则:
-
变量名第一个字符必须是字母或下划线
_(不能是数字) -
后面可以跟字母、数字、下划线
-
区分大小写 ——
$code、$Code、$CODE是三个不同的变量 -
用等号
=赋值
<?php
// 合法写法
$name = "代码号";
$_count = 10;
$user_age = 25;
$var2 = "test";
// 下面这些是错的
// $123abc = "不行"; // 数字开头,报错
// $user-name = "不行"; // 连字符,报错
// $user name = "不行"; // 空格,报错
?>
命名风格建议(非强制,但推荐):
-
驼峰式(camelCase):
$myVariableName—— 首字母小写,后续单词首字母大写 -
下划线式(snake_case):
$my_variable_name—— 全小写,单词间下划线
代码号习惯用驼峰,看个人喜好,团队统一就行。
三、代码号示例:六种变量类型逐个看
示例1:字符串变量
<?php
$greeting = "代码号欢迎你";
echo $greeting;
?>
输出:
代码号欢迎你
示例2:整数变量
<?php
$studyDays = 30;
echo "已经学习PHP " . $studyDays . " 天";
?>
输出:
已经学习PHP 30 天
示例3:浮点数变量
<?php
$coursePrice = 199.99;
echo "课程价格:¥" . $coursePrice;
?>
输出:
课程价格:¥199.99
示例4:布尔变量
<?php
$isCompleted = true;
if ($isCompleted) {
echo "课程已学完";
} else {
echo "课程还在进行中";
}
?>
输出:
课程已学完
项目开发中布尔变量经常配合表单提交、登录状态、开关设置来用。
示例5:数组变量
<?php
$lessons = array("变量", "循环", "函数", "数组");
echo "当前学习章节:" . $lessons[0];
?>
输出:
当前学习章节:变量
数组索引从0开始,新手容易在这踩坑。
示例6:对象变量
<?php
class User {
public $name = "代码号学员";
}
$student = new User();
echo $student->name;
?>
输出:
代码号学员
对象变量用得少?不,现在PHP框架里到处都是对象。
四、变量的作用域(Scope)
作用域决定了变量在哪能访问到,在哪访问不到。四个层级需要了解。
全局变量 vs 局部变量
<?php
$globalMsg = "我是全局变量";
function testScope() {
$localMsg = "我是局部变量";
echo $localMsg; // 可以访问
// echo $globalMsg; // 不行!函数里访问不到全局变量
}
testScope();
echo $globalMsg; // 可以访问
// echo $localMsg; // 不行!函数外访问不到局部变量
?>
关键点:函数内部默认访问不到全局变量。想访问怎么办?用$GLOBALS数组。
<?php
$globalMsg = "全局内容";
function testGlobal() {
// 两种方式访问全局变量
echo $GLOBALS['globalMsg']; // 方式一
global $globalMsg; // 方式二
echo $globalMsg;
}
?>
静态变量(static)
普通变量在函数执行完就销毁了。静态变量不同——函数调用结束后保留值。
<?php
function codeCount() {
static $count = 0;
$count++;
echo "第 {$count} 次调用<br>";
}
codeCount(); // 第1次调用
codeCount(); // 第2次调用
codeCount(); // 第3次调用
?>
输出:
第1次调用
第2次调用
第3次调用
代码号经验:静态变量适合做计数器、缓存简单数据。但别滥用——并发请求下静态变量在不同用户之间不隔离,容易出问题。
参数作用域
函数的参数本质上是局部变量,只在函数内部有效。
<?php
function sayHello($name) { // $name是参数
echo "你好," . $name;
}
sayHello("代码号学员");
// echo $name; // 报错,函数外访问不到$name
?>
五、变量变量(Variable Variables)
这个语法比较特别。用两个$$——第一个$解析变量值,把值作为新变量名。
<?php
$course = "PHP";
$$course = "代码号教程"; // 等同于 $PHP = "代码号教程"
echo $course; // 输出:PHP
echo $$course; // 输出:代码号教程
echo $PHP; // 输出:代码号教程
?>
说实话,实际项目里变量变量用得极少。可读性差,容易把人绕晕。知道有这么个东西就行,不建议主动用。
六、变量在Web开发中的实际用途
PHP变量不是纸上谈兵,实际干的事包括:
1. 接收用户输入
表单提交的内容、URL参数,都得存到变量里再处理。
2. 做算术运算
价格计算、数据统计,变量存数字然后加减乘除。
3. 动态生成页面内容
登录前后显示不同菜单、根据用户偏好展示不同内容——靠变量控制。
4. 追踪应用状态
用户登录状态、购物车商品、浏览历史,用变量存储跟踪。
5. 组织和操作数据
数组、对象把零散数据组织起来方便处理。
七、本节课程知识要点
| 知识点 | 说明 |
|---|---|
| $符号 | 所有变量必须以$开头 |
| 动态类型 | 不需要提前声明类型,PHP自动推断 |
| 区分大小写 | $var和$Var是不同变量 |
| 命名规则 | 字母或下划线开头,后面可跟字母数字下划线 |
| 作用域 | 全局、局部、静态、参数四种 |
| $GLOBALS | 函数内访问全局变量的桥梁 |
| static | 函数调用间保留值的变量 |
| $$变量变量 | 语法存在,日常不用 |