php教程技术文章
-
PHP 调用 session_regenerate_id() 返回 false 时,不要立即销毁旧会话。本文给出前置检查、旧数据保留、失败原因记录和成功/失败分支处理方法。258 收藏 -
PHP backed enum 会把 case 的显式 value 作为 JSON 标量输出。本文用字符串枚举说明定义、序列化、反序列化和自定义 JsonSerializable 的边界。258 收藏 -
PHP 8.5 升级排查不要只盯动态属性。本文把 PHP 8.5 新弃用与 PHP 8.2 动态属性历史问题分开,用 E_ALL 日志、源码扫描和测试矩阵定位受影响代码。251 收藏 -
PHP Fiber 的异常不是由 resume 返回,而是从 Fiber::suspend() 的暂停点重新抛出;本文用一个最小任务调度器说明 start、resume、throw 的关系和终止边界。246 收藏 -
本文用 PausableTask 封装 PHP Fiber 的启动、挂起、恢复与异常注入,解释 start、resume、suspend、throw、getReturn 的双向数据语义,并处理可恢复异常和非法状态调用。246 收藏 -
PHP filter_input 读取的是请求进入 PHP 时的原始输入快照,不会跟随代码后面对 $_GET 或 $_POST 的修改。本文用最小示例说明读取边界,并给出改用 filter_var、区分 null 与 false、处理数组参数的排查方案。237 收藏 -
PHP 的 SameSite=None 必须配合 Secure,本地 HTTP、localhost 例外和跨站请求条件又不完全相同。本文用配置示例和排查清单说明为什么 Cookie 看似设置成功却没有随下一次请求发送。234 收藏 -
解释 PHP OPcache preload 的启动时机、preload.php 写法、PHP-FPM 重启边界和部署排查清单,帮助项目避免把普通缓存刷新误当成预加载刷新。233 收藏 -
PHP 8.5 引入的 Uri\Rfc3986\Uri 能把带端口的地址拆成可读取字段,并通过不可变对象安全生成新端口版本。本文用一个内网 API 地址说明 getPort、withPort、toString 的配合方式,以及缺少端口和非法 URI 的处理边界。232 收藏 -
PHP array_is_list([]) 会返回 true,因为空数组没有违反从 0 开始且连续排列的键规则。本文对照空洞、乱序和字符串键,并给出 PHP 8.1 以前的兼容判断写法。229 收藏 -
PHP WeakMap 能以对象为键保存临时附加元数据,而且键不会增加对象引用计数。本文通过一个 MetadataRegistry 小项目演示写入、读取、自动移除与验收,并说明它和 SplObjectStorage 的选择边界。227 收藏 -
PHP 8.4 属性钩子可以把读取格式化与写入校验拆开。本文用一个可复用的值对象示例说明 get、set、virtual property、backing value 和反射验证之间的关系。226 收藏 -
PHP PDO 分页查询中,LIMIT 和 OFFSET 属于整数边界,直接用 execute 数组传参时默认按字符串处理,可能触发 SQL 语法错误。本文说明占位符的边界、参数类型差异和完整分页写法,并给出 bindValue 与 bindParam 的选择建议。226 收藏 -
PHP 文件上传不能直接相信客户端文件名,也不能只判断扩展名。本文按错误码、大小、真实 MIME、服务端命名和非公开目录的顺序,给出从临时路径到持久化文件的安全处理流程。223 收藏 -
PHP 8.2 引入 readonly class 后,子类并不能像普通类一样随意继承。本文用最小示例说明只读继承、属性类型、静态属性与动态属性的限制,并给出迁移和验证清单。223 收藏