PHP函数掌握靠查文档和踩坑,而非死记硬背;官方文档、错误信息搜索、用户笔记及细节差异(如参数顺序、类型转换、时区配置)才是关键。

PHP内置函数不是靠背下来的,是靠查文档+踩坑记熟的;别信“常用函数汇总”这种标题,真写业务时你只会记得 array_filter、json_encode、preg_match 这几个,其他全靠 php.net 搜。
查函数别翻“汇总表”,直接去 php.net 搜错误信息或功能关键词
你遇到 Warning: Invalid argument supplied for foreach(),第一反应不该是“哪个函数能修 foreach”,而是搜这个错误本身——结果页里会直接带出 is_array、isset、gettype 的用法示例。官方文档每个函数页底部都有“User Contributed Notes”,比任何中文教程都真实,比如 date 函数下有人贴出时区不生效的 7 种写错姿势。
- 搜索优先级:错误信息 > 功能描述(如“截取字符串”) > 函数名(如“substr”)
- 别信第三方整理的“50个必学函数”,
str_replace和strtr行为差异大到能引发线上 bug,但汇总表从不提 - PHP 8.0+ 新增的
str_starts_with、str_contains已替代一堆strpos === 0写法,老汇总表根本没它们
array_* 系列函数参数顺序反直觉,不记清就容易传错
PHP 数组函数的参数顺序没统一逻辑:array_map 是 callback, array,array_filter 却是 array, callback,而 array_reduce 又变成 array, callback, initial。传反了不会报错,但结果为空或错乱,调试时极难定位。
-
array_filter($arr, $callback)—— 数组在前,回调在后;漏掉第二个参数会过滤掉所有 falsy 值(0、''、null 都没了) -
array_map($callback, $arr)—— 回调在前,数组在后;如果传反,PHP 会把数组当回调,报Warning: First argument is expected to be a valid callback - 带键操作的函数(如
array_walk)默认不保留原数组,要修改必须用引用&$item,否则白写
JSON 和类型转换函数最容易埋兼容性雷
json_encode 默认不处理中文字符(输出 \uXXXX),json_decode 默认返回 stdClass 对象而非数组,这两个点上线后被骂最多。还有 (int) 强转和 intval() 在处理超长数字时行为不一致,PHP 7.4+ 甚至改过 floatval 解析科学计数法的精度。
立即学习“PHP免费学习笔记(深入)”;
-
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE)才算生产环境可用的基础配置 -
json_decode($json, true)的第二个参数true别省,否则后续用$obj->key会报错 -
filter_var($input, FILTER_VALIDATE_INT)比is_numeric或(int)更可靠,尤其对"123abc"这种混合字符串
正则、文件、时间函数本地环境和线上常不一致
preg_match 在 Windows 上默认不支持 u 修饰符(UTF-8),file_get_contents 读取远程 URL 时,本地开 allow_url_fopen=On,但 Docker 容器或阿里云函数可能默认关;date('Y-m-d') 输出依赖服务器时区,不是代码里设了 date_default_timezone_set 就万事大吉——CLI 和 FPM 的 php.ini 可能加载不同配置。
- 检查时区:运行
php -r "echo date_default_timezone_get();",别只信代码里的date_default_timezone_set - 读远程文件优先用
curl扩展,file_get_contents的超时、重试、SSL 验证都难控 - 正则测试别只在本地写死字符串,用真实用户输入(含换行、\0、emoji)跑一遍,
mb_ereg已废弃,坚持用preg_match+u修饰符
真正卡住你的从来不是“有哪些函数”,而是 json_encode 没加标志位、array_filter 忘写回调、date 时区配错 php.ini —— 这些细节不在任何汇总表里,只在你 deploy 失败的那一刻才突然变得无比清晰。











