PHP 语法基础速查:从运算符到核心函数的完整入门地图
本文系统整理 PHP 核心语法要素:注释、引号、布尔、变量类型、转义字符、运算符优先级、赋值/位/逻辑运算、特殊符号、20+ 高频内置函数,配合代码示例,适合新手建立知识框架、老手快速回顾。
一、基础语法符号
| 类别 | 符号 | 用法示例 |
| 注释 | // | 单行注释 |
/* */ | 多行注释 |
| 引号 | '...' | 单引号:原样输出,不解析变量、转义 |
"..." | 双引号:解析变量 $var、转义序列 |
`...` | 反引号:执行系统命令 (如 `ls -la`) |
| 布尔 | true/false | 大小写不敏感,推荐小写 |
二、八大变量类型
<?php
$str = "字符串"; // string
$int = 42; // integer
$float = 3.14; // double/float
$bool = true; // boolean
$arr = [1, 2, 'a' => 3]; // array
$obj = new stdClass(); // object
$res = fopen('file', 'r'); // resource
$null = null; // NULL
// 类型检测
gettype($var); // 返回类型字符串
settype($var, 'string'); // 强制转类型 (修改原变量)
?>
三、转义字符速查 (双引号/heredoc 中生效)
| 序列 | 含义 | ASCII |
\" | 双引号 | 34 |
\\ | 反斜杠 | 92 |
\n | 换行 (LF) | 10 |
\r | 回车 (CR) | 13 |
\t | 制表符 | 9 |
\v | 垂直制表 | 11 |
\e | Escape (PHP 5.4+) | 27 |
\f | 换页 | 12 |
\$ | 美元符号 (防变量解析) | 36 |
\xHH | 十六进制字符 | - |
\u{HHHH} | Unicode 码点 (PHP 7+) | - |
四、运算符优先级 (高→低)
1. clone, new // 实例化
2. [, ~, ++, --, @, (int), ... // 一元运算
3. instanceof // 类型检查
4. *, /, % // 乘除模
5. +, -, . // 加减、字符串连接
6. <<, >> // 位移
7. <, <=, >, >= // 比较
8. ==, !=, ===, !==, <>, <=> // 等值/全等/太空船
9. & // 位与
10. ^ // 位异或
11. | // 位或
12. && // 逻辑与
13. || // 逻辑或
14. ?? // 空合并 (PHP 7+)
15. ?: // 三元/Elvis
16. =, +=, -=, *=, /=, .=, ... // 赋值
17. and, xor, or // 低优先级逻辑
18. , // 逗号
五、特殊符号速查
| 符号 | 名称 | 用法 |
$ | 变量前缀 | $name |
& | 引用赋值 | $a = &$b |
@ | 错误抑制 | @file_get_contents() |
-> | 对象成员访问 | $obj->method() |
=> | 数组键值分隔 | ['key' => 'val'] |
?: | Elvis/三元 | $a ?: $b / $a ? $b : $c |
:: | 静态成员/常量 | Class::CONST |
\ | 命名空间分隔 | Namespace\Class |
... | 可变参数/展开 | fn(...$args) / [$a, ...$b] |
六、20 个高频内置函数实战
1. 字符串大小写
strtolower($str); // 全小写
strtoupper($str); // 全大写
ucfirst($str); // 首字母大写
ucwords($str); // 每单词首字母大写
2. 加密/编码
md5($str); // 32位十六进制 (不可逆、不安全)
sha1($str); // 40位 (不可逆、不安全)
hash('sha256', $str); // 现代推荐
password_hash($pwd, PASSWORD_DEFAULT); // 密码专用 (含盐、自适应)
password_verify($pwd, $hash); // 验证
base64_encode($data); // 可逆编码
base64_decode($data); // 解码
3. HTML 安全
htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); // & < > " ' → 实体
htmlentities($str); // 所有可转实体字符均转换
strip_tags($str, ''); // 去除 HTML 标签,保留允许标签
4. 批量输出 (Heredoc/Nowdoc)
echo <<
5. 文件存在性检查
if (file_exists($path)) {
echo file_get_contents($path);
}
6. 内存释放
unset($var); // 销毁变量
unset($a, $b, $c); // 批量销毁
7. 类型检测家族
is_numeric($v); // 数字或数字字符串
is_int($v); // 整数类型
is_float($v); // 浮点类型 (is_real 别名)
is_string($v); // 字符串
is_array($v); // 数组
is_object($v); // 对象
is_bool($v); // 布尔
is_null($v); // null
isset($v); // 定义且非 null
empty($v); // 空值: "", 0, "0", null, false, [], 未定义
8. 字符串截取
substr($str, $start, $length);
// 正数: 从左计, 负数: 从右计
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', -1, 1); // f
echo substr('abcdef', -3); // def
9. 换行转换
nl2br($str); // \n →
(保留 \n)
七、避坑指南 Top 10
== vs ===:'123' == 123 (true) 但 '123' === 123 (false)
empty('0') 为 true (字符串 "0" 视为空)
isset() 只能检测变量,不能用函数返回值
foreach 值传递修改原数组无效,需 &$v 或 $arr[$k]
array_merge 数字键重新索引,字符串键后者覆盖
strpos 返回 0 (找到在首位) 非 false,必须 !== false
date('Y-m-d') 时区默认 UTC,必须 date_default_timezone_set('PRC')
header() 前不能有任何输出 (含 BOM、空白)
include 失败仅警告,require 失败致命错误
- 超全局变量
$_GET/$_POST/$_SESSION 等自动全局化,函数内需 global 或参数传递