PHP: 变量与数据类型

变量就像带标签的盒子——你把数据放进盒子,贴上标签,以后用标签就能找到它。PHP 的变量标签必须以 $ 开头,这是 PHP 最明显的特征。

1. 变量的声明与命名

PHP 中声明变量很简单:$ + 变量名 = 值。不需要像 C/Java 那样先声明类型。

PHP
<?php
$name = "小明";      // 字符串
$age = 25;           // 整数
$height = 1.75;      // 浮点数
$isStudent = true;   // 布尔值
?>

(1) 命名规则

规则 正确 错误
$ 开头 $name name(没有$)
字母或下划线开头 $name, $_name $1name, $-name
后面可跟字母/数字/下划线 $user_id, $user2 $user-id, $user@id
区分大小写 $name$Name
使用 camelCase $firstName, $userAge
💡 提示: PHP 变量名以 $ 开头来自于 Perl 语言。这让你在 HTML 混写时一眼就能认出哪些是 PHP 变量。


2. PHP 的八种数据类型

PHP 有 8 种原始类型,分为三大类:

大类 类型 示例 说明
标量 string "Hello" 字符串
int 42 整数
float 3.14 浮点数(也叫 double)
bool true / false 布尔值
复合 array [1, 2, 3] 数组
object new User() 对象
callable 回调函数 可调用类型
iterable 可遍历 可迭代类型
特殊 null null 空值
resource 文件句柄/数据库连接 外部资源引用

▶ 示例:用 var_dump 查看变量类型

PHP
<?php
$name = "小明";
$age = 25;
$price = 19.99;
$isValid = true;
$nothing = null;

var_dump($name);     // string(6) "小明"
var_dump($age);      // int(25)
var_dump($price);    // float(19.99)
var_dump($isValid);  // bool(true)
var_dump($nothing);  // NULL
?>
▶ 试一试

3. 字符串基本用法

PHP
<?php
$s1 = 'PHP教程';           // 单引号:纯字符串,不解析变量
$s2 = "PHP教程";           // 双引号:会解析里面的变量和转义符

$name = "小明";
echo '你好 $name';         // 你好 $name  — 单引号不解析变量
echo "你好 $name";         // 你好 小明   — 双引号解析变量
?>
写法 解析变量? 解析转义符? 适用场景
'单引号' 只转义 \\\' 纯文本
"双引号" 解析 \n \t 需要嵌入变量时

下一课会深入讲字符串的完整操作。

▶ 示例:单双引号对比

PHP
<?php
$name = "小明";

// 单引号:原样输出
echo '你好,$name!\n今天天气不错。';
// 输出:你好,$name!\n今天天气不错。

// 双引号:解析变量和转义符
echo "你好,$name!\n今天天气不错。";
// 输出:你好,小明!(换行)今天天气不错。
?>
▶ 试一试

4. 整数(int)与浮点数(float)

PHP
<?php
$decimal = 42;         // 十进制
$hex = 0x2A;           // 十六进制 (=42)
$octal = 052;          // 八进制 (=42)
$binary = 0b101010;    // 二进制 (=42)

$float1 = 3.14;        // 浮点数
$float2 = 1.2e3;       // 科学记数法 = 1200
$float3 = 7E-10;       // 科学记数法 = 0.0000000007
?>
⚠️ 注意: 浮点数不能精确表示十进制小数。0.1 + 0.2 在 PHP 中不等于 0.3,而是类似 0.30000000000000004。涉及金钱计算时,用整数存"分"或用 bcmath 扩展。


5. 布尔值(bool)

布尔值只有两个:truefalse。不区分大小写,但习惯用小写。

PHP
<?php
$isLogin = true;
$isAdmin = false;

if ($isLogin) {
    echo "欢迎回来!";
}
?>
💡 提示: echo true 输出 1echo false 输出空字符串(什么都不显示)。要查看布尔值用 var_dump()


6. 类型检测函数

PHP
<?php
$name = "小明";
$age = 25;

var_dump(is_string($name));   // bool(true)
var_dump(is_int($age));       // bool(true)
var_dump(is_float($age));     // bool(false)
var_dump(is_bool($age));      // bool(false)
var_dump(is_array($name));    // bool(false)

// gettype() 返回类型名(调试用,不用于逻辑判断)
echo gettype($name);  // string
?>
函数 检测类型
is_string() 字符串
is_int() 整数
is_float() 浮点数
is_bool() 布尔值
is_array() 数组
is_null() NULL
is_numeric() 数字或数字字符串

7. 类型转换

PHP 是弱类型语言,会自动转换类型。你也可以显式转换:

PHP
<?php
// 自动转换
$result = "10" + 5;         // 15("10"转成数字)
$text   = "10" . 5;         // "105"(数字5转成字符串)

// 显式转换
$intVal   = (int) "123";    // 123
$floatVal = (float) "3.14"; // 3.14
$strVal   = (string) 123;   // "123"
$boolVal  = (bool) 1;       // true
?>

▶ 示例:类型转换综合

PHP
<?php
// 字符串转数字
$a = (int) "42";
echo $a + 8;  // 50

// 数字转字符串
$b = (string) 100;
echo "价格:" . $b . "元";  // 价格:100元

// 布尔转换规则:以下值被视为 false
echo (int)((bool)0);     // 0
echo (int)((bool)"");    // 0
echo (int)((bool)[]);    // 0
echo (int)((bool)null);  // 0
// 其他所有值都是 true
?>
▶ 试一试
⚠️ 注意: "0"""0[]null 在布尔上下文中都是 false。记不住时用 var_dump((bool)$x) 实际测一下。


8. isset() 和 empty()

这三个是 PHP 使用频率最高的变量处理函数:

PHP
<?php
$var1 = "Hello";
$var2 = null;

// isset():变量已设置且不为 null → true
var_dump(isset($var1));       // bool(true)
var_dump(isset($var2));       // bool(false)
var_dump(isset($notExist));   // bool(false) - 不存在

// empty():变量为空 → true(""、0、"0"、null、false、[] 都算空)
var_dump(empty($var1));       // bool(false) — "Hello" 不为空
var_dump(empty($var2));       // bool(true)  — null 为空
var_dump(empty(0));           // bool(true)  — 0 被视为空!
var_dump(empty($notExist));   // bool(true)  — 不存在也视为空
?>

▶ 示例:isset vs empty 对比

PHP
<?php
function testVar(string $label, mixed $value): void {
    echo "$label — isset: " . (isset($value) ? 'true' : 'false');
    echo " | empty: " . (empty($value) ? 'true' : 'false') . "<br>";
}

testVar('"Hello"', "Hello");
testVar('""', "");
testVar('0', 0);
testVar('null', null);
// 观察每个值的 isset 和 empty 结果
?>
▶ 试一试
🔥 易错: empty(0) 返回 true!0 被视为"空"。验证数字是否输入时,用 isset() 配合 is_numeric(),不要用 empty()

❓ 常见问题

Q 为什么 echo false 不显示任何东西?
A 因为 echo false 等价于 echo ""(空字符串)。要查看布尔值用 var_dump($var)echo $var ? 'true' : 'false'
Q isset()empty() 什么时候用哪个?
A isset() 判断"变量存在且有值(不为null)",用于检查表单是否提交。empty() 判断"变量是否为空/零/false",用于验证输入是否为空。检查数字输入用 isset() + is_numeric(),不要用 empty()
Q PHP 是弱类型语言,会不会容易出现类型 bug?
A 养成两个好习惯:(1) 用 === 而非 == 做比较(严格比较不自动转换类型);(2) 在函数参数上加类型声明(PHP 7+ 支持)。后续课程会详细讲。

📖 小节

📝 作业

  1. 创建 3 个不同类型的变量(字符串、整数、布尔),用 var_dump()gettype() 分别查看类型。
  2. 写一段代码测试 isset()empty() 在以下值上的表现:"Hello"""0null、未定义变量。总结它们的区别。
  3. 写一个类型转换练习:把用户输入的价格字符串(如 "99.9元")转成可计算的浮点数。试试 (float) 能直接转换吗?不能的话想想怎么办。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏