PHP 是动态类型的——变量(以 $ 开头)不需要声明类型,可以保存任何值。PHP 有多个内置类型,涵盖标量类型、复合类型和特殊值。
变量和标量类型
php
= ;
= ;
= ;
= ;
= ;
变量始终以 $ 开头,其类型由赋值推断。四种标量类型是 int、float、string、bool。
$list = [1, 2, 3]; // array (PHP's all-purpose collection)
$map = ["name" => "Ann"]; // associative array (key → value)
$obj = new User(); // object (instance of a class)
$fn = fn($x) => $x * 2; // callable (closure/function)
$nothing = null; // null — "no value"
Array 是 PHP 的多功能集合类型(既可作为索引列表,也可作为键值映射),还有 object、callable 和 null。
gettype($count); // "integer"
is_int($count); // true
is_string($name); // true
(int) "42"; // 42 — explicit cast
(string) 42; // "42"
intval("42px"); // 42
// PHP automatically converts types in operations ("type juggling")
"5" + 3; // 8 (string "5" coerced to int)
"5" . 3; // "53" (. concatenates → both become strings)
// loose vs strict comparison
0 == "hello"; // historically true in old PHP (now false in PHP 8) — type juggling traps
0 === "0"; // false — STRICT comparison checks type too (preferred!)
"1" == 1; // true (loose) — but "1" === 1 is false
PHP 的自动类型强制转换会导致令人惊讶的比较结果。解决方案:优先使用严格比较(===),它同时检查类型和值,避免松散比较(==)的陷阱。
理解 PHP 的变量类型是基础日常知识。
关键要点:PHP 是动态类型的(变量可以保存任何值,类型由赋值推断),具有标量类型、多功能的 array(既可用作列表又可用作映射——PHP 最常用的数据结构)、object 和 null。
最重要的是,要了解类型强制转换——PHP 在运算和比较中的自动类型转换,这会导致众所周知的令人惊讶的结果——以及使用**严格比较(===)**而非松散比较(==)的做法,对于编写正确、无 bug 的 PHP 代码至关重要。
+(数值)和 .(字符串连接)的区别,以及显式类型转换,也是日常基础。
这个基础类型知识支撑正确的 PHP 代码,并帮助避免这门语言众所周知的比较陷阱。