PHP 变量
在 PHP 中,变量是代表数据存储位置的符号名称。你可以把它们想象成一个个带有标签的盒子,里面装满了可以在整个脚本中被操作和引用的信息。
与其他一些强制要求声明数据类型的编程语言不同,PHP 变量不需要显式地声明类型;它们的类型是由赋给它们的数据自动决定的。在 PHP 中,每一个变量都必须以美元符号 ($) 开头。
1. 声明 PHP 变量
在 PHP 中声明变量主要包含两个步骤:以美元符号开始变量名,然后给它赋一个值。当你第一次给变量赋值时,PHP 就会自动创建这个变量。
<?php
$name = "Alice"; // 声明一个名为 $name 的变量,并赋值为字符串 "Alice"
$age = 30; // 声明一个名为 $age 的变量,并赋值为整数 30
$price = 19.99; // 声明一个名为 $price 的变量,并赋值为浮点数 19.99
$isActive = true; // 声明一个名为 $isActive 的变量,并赋值为布尔值 true
?>变量也可以在没有初始值的情况下声明,但在显式赋值之前,它们在技术上会带有一个 NULL(空)值。如果在赋值之前就尝试访问一个变量,PHP 会抛出一个 NOTICE(通知)级别的错误,提示“Undefined variable(未定义变量)”。
<?php
$city; // 声明了变量 $city,在赋值前它隐式包含一个 NULL 值
$country = "USA"; // 立即给 $country 赋值
$zipCode = null; // 显式地给 $zipCode 赋值为 NULL
echo $city; // 这将不会输出任何内容,并会产生一个 NOTICE:未定义变量 $city
echo $country; // 输出:USA
echo $zipCode; // 不输出任何内容,因为 echo 不会显示 NULL 值
?>最佳实践: 养成在声明变量时就为其分配默认值或初始值的好习惯。这可以防止“未定义变量”的报错,并确保代码的运行表现符合预期。
2. PHP 变量命名规则
PHP 有一套严格的变量命名规则。遵守这些规则能确保你的代码合法且易于阅读。
2.1 必须以美元符号 ($) 开头
所有的 PHP 变量都必须以美元符号打头。这能让 PHP 解析器将它们与脚本中的其他元素(如常量或保留关键字)区分开来。
<?php
$validVariable = "你好"; // 合法
// myVariable = "不合法"; // 这会导致语法错误,缺少 $
?>2.2 第一个字符的限制
紧跟在美元符号后面的第一个字符必须是字母 (a-z, A-Z) 或下划线 (_)。它绝不能是数字。
<?php
$firstName = "John"; // 合法
$_lastName = "Doe"; // 合法
// $1stAttempt = "失败"; // 不合法 - $ 后面不能直接跟数字
?>2.3 后续字符的限制
在第一个字符之后,变量名可以包含字母 (a-z, A-Z)、数字 (0-9) 和下划线 (_)。不允许使用任何其他特殊字符(如空格、连字符、句号,或 !, @, # 等符号)。
<?php
$total_amount = 150.75; // 合法
$user_id_99 = 10; // 合法
// $user-name = "Jane"; // 不合法 - 包含了连字符
// $user Name = "Bob"; // 不合法 - 包含了空格
?>2.4 区分大小写
PHP 变量名是区分大小写的。这意味着 $name 和 $Name 会被系统当成两个完全不同的变量。
<?php
$score = 100;
$Score = 200;
echo $score; // 输出:100
echo $Score; // 输出:200
?>如果管理不善,这种大小写敏感性经常会成为 Bug 的源头。因此,保持一致的命名规范至关重要。
2.5 避免使用保留关键字
变量名不能是 PHP 的保留关键字(例如 if, else, while, for, class, function 等)。尝试使用保留关键字作为变量名会导致语法错误。
3. 变量命名的最佳实践(行业规范)
虽然上述规则定义了什么是“合法”的,但最佳实践能指导你写出具备高可读性和可维护性的专业代码。
3.1 见名知意(描述性名称)
选择能清晰表明变量用途或其存储数据类型的名称。
- 好的命名:
$customerName,$totalPrice,$isLoggedIn - 坏的命名:
$cn,$tp,$il(除非上下文极其明显,但这在实际开发中很少见)
3.2 驼峰命名法 (camelCase)
对于由多个单词组成的变量名,驼峰命名法(第一个单词全小写,后续每个单词的首字母大写)是现代 PHP 开发中被最广泛采用的规范。
<?php
$firstName = "Alice";
$productQuantity = 5;
$orderConfirmationNumber = "XYZ789";
?>3.3 蛇形命名法 (snake_case)
另一种常见的规范是蛇形命名法(使用下划线分隔单词)。虽然在现代 PHP 的普通变量命名中不如驼峰法普及,但它经常出现在较老的 PHP 项目或特定的上下文中(如数据库的列名)。
<?php
$first_name = "Bob";
$product_quantity = 10;
?>关键在于一致性。 在你的项目中选择一种命名规范,并从头到尾坚持使用它。
3.4 避免使用单字母变量
除了在非常小的作用域内作为简短的循环计数器(如 $i, $j)之外,单字母变量名通常缺乏描述性,让人难以理解其含义。
3.5 布尔值变量加前缀
许多开发者习惯在布尔(真/假)变量前加上 is、has 或 can 等前缀,以明确表明它们的布尔属性。
<?php
$isActive = true; // 是否激活
$hasPermission = false; // 是否拥有权限
$canEdit = true; // 是否可以编辑
?>4. 综合实战案例
让我们通过更详细的例子来说明这些概念。
4.1 案例 1:存储用户信息
假设我们正在开发一个在线注册系统。我们需要存储用户的各种信息片段。
<?php
// 用户的个人详细信息
$userName = "john.doe"; // 用户的唯一用户名
$userEmail = "john.doe@example.com"; // 用户的电子邮件地址
$userAge = 28; // 用户的年龄
$isPremiumUser = true; // 指示用户是否拥有高级访问权限的布尔值
// 显示存储的信息
echo "欢迎," . $userName . "!<br>";
echo "你的邮箱是:" . $userEmail . "<br>";
echo "你今年 " . $userAge . " 岁。<br>";
if ($isPremiumUser) {
echo "你拥有高级会员权限。<br>";
} else {
echo "你拥有普通访问权限。<br>";
}
?>在这个例子中:
$userName和$userEmail具有描述性并使用了驼峰命名法。$userAge存储了一个数值。$isPremiumUser清晰地表明了这是一个布尔状态。- 所有变量在声明时都直接赋予了初始值。
4.2 案例 2:计算商品最终价格
想象一个电子商务场景,你需要计算商品的最终结算价格。
<?php
$productName = "智能手表"; // 商品名称
$basePrice = 199.99; // 商品的初始基础价格
$taxRate = 0.08; // 8% 的税率 (0.08 即 8/100)
$discountPercentage = 0.15; // 15% 的折扣 (0.15 即 15/100)
// 计算折扣金额
$discountAmount = $basePrice * $discountPercentage;
// 计算折后价格
$priceAfterDiscount = $basePrice - $discountAmount;
// 计算税费金额
$taxAmount = $priceAfterDiscount * $taxRate;
// 计算最终总价
$finalPrice = $priceAfterDiscount + $taxAmount;
echo "商品:" . $productName . "<br>";
echo "基础价格:$" . $basePrice . "<br>";
echo "折扣金额:$" . round($discountAmount, 2) . "<br>"; // round() 用于保留两位小数
echo "折后价格:$" . round($priceAfterDiscount, 2) . "<br>";
echo "税费 (" . ($taxRate * 100) . "%):$" . round($taxAmount, 2) . "<br>";
echo "最终价格:$" . round($finalPrice, 2) . "<br>";
?>在这里,所有的变量都被声明、赋值,并在后续计算中被使用。每一个变量的名字都精确地反映了它的具体用途。