-
PHP 项目报 Class not found 时,先不要盲目重装依赖。本文用 App\ 映射到 src/ 的例子,按命名空间、目录、文件名、大小写、dump-autoload 和 class_exists 逐层核对,定位 Composer PSR-4 自动加载失效的具体位置。
-
开启 PHP session.use_strict_mode 后,旧系统可能因手工预设未初始化 Session ID 而读不到登录前状态。本文解释 Cookie、有效 Session 和严格模式的关系,并给出先启动会话、登录后轮换 ID 的改法。
-
PHP Session cookie 可以在 session_start 前用 options 数组同时配置 SameSite、Secure 和 HttpOnly。本文说明 Lax 与 Strict 的选择、HTTPS 前提,以及 cookie 生命周期和服务端 Session 清理的区别。
-
PHP backed enum 直接 json_encode 时默认输出 backing value,而不是 case 名称。本文用最小示例区分 name、value、from/tryFrom,并给出需要输出名称或二者并存时的 JsonSerializable 写法。
-
PHP backed enum 处理请求字符串时,应在输入边界先用 tryFrom() 判断合法性,非法值返回 400;可信内部值再使用 from(),JSON 默认输出 backing value。
-
PHP Attribute 参数传错时,应把类型写进属性构造函数,并在配置加载阶段调用 ReflectionAttribute::newInstance(),让 TypeError 或业务校验异常在服务启动前暴露。本文给出属性定义、反射过滤、异常上下文和常见边界的完整写法。
-
用 PHP 8 的 Attribute::TARGET_PROPERTY 标记字段,再通过 ReflectionClass 和 ReflectionProperty::getAttributes() 精确找到目标属性,最后读取参数或实例化自定义 Attribute。
-
PHP Fiber::resume() 的参数会回到嵌套调用栈中的 Fiber::suspend(),而 Fiber 终止后的最终结果要通过 getReturn() 读取。本文用原创示例区分三种返回值,并对比 Fiber 与 Generator。
-
PHP Fiber 挂起后,调用方可以用 Fiber::throw() 把异常注入当前 Fiber::suspend();本文用代码说明 Fiber 内部捕获、调用方兜底、状态判断和 getReturn() 的边界,并对比 Generator 的调用栈差异。
-
用 PDO::ATTR_DEFAULT_FETCH_MODE 在连接创建时统一默认返回形态,再用语句级 FETCH_* 覆盖特殊查询,避免项目里反复写 fetch 参数。
-
PDO::getAttribute 取不到值不等于驱动不可用。本文按驱动加载、连接身份、属性探测三层判断,并演示如何区分有效值、null 与 PDOException。
-
Laravel 队列扣款任务要安全重试,需把数据库唯一键、事务提交时机、网关幂等键和查询优先策略放在同一条链路上,避免网络超时或 worker 重启造成重复扣款。
-
Composer 报平台依赖不满足时,先用 check-platform-reqs 检查生产机真实 PHP 与扩展,再对照 composer.json 的 require、config.platform 和 lock 文件定位差异,避免用忽略平台要求掩盖运行时问题。
-
DOMDocument 解析不可信 XML 时,默认不要打开实体替换和外部 DTD 加载;用 LIBXML_NONET 限制网络访问,并按 PHP/libxml 能力补充 LIBXML_NO_XXE。本文给出安全的最小配置、遗留 DTD 场景的隔离方式和升级检查清单。
-
用 DateTimeImmutable 和明确的 IANA 时区计算月末,避开直接加月份的月底溢出,并封装成可复用的 PHP 函数。