php教程技术文章
-
PHP stream_select 适合把多个非阻塞流放进同一等待循环。本文用 socket_pair 演示读写集合、超时返回值、EOF 与部分写入的判断,解释为什么每轮必须重建数组,避免 CPU 空转。128 收藏 -
文章 · php教程 | 1星期前 | 反射 · PHP · PHP 8.4 · ReflectionProperty · 属性钩子 · 反射 属性钩子 PHP 8.4 ReflectionProperty::isVirtual 虚拟属性
PHP 8.4 的属性钩子让属性可以只有 get 逻辑,但反射遍历时不能再把所有属性都当作有存储空间。本文用 ReflectionProperty::isVirtual 区分虚拟属性、带存储的 hooked 属性和普通属性,并给出兼容旧版本的检测边界。438 收藏 -
用 PHP 8.2 的 BackedEnum 接收表单字符串,区分 tryFrom 与 from 的错误语义,补上空值、非法值、默认分支和 JSON 响应校验。372 收藏 -
处理日志或导入文件时,stream_filter_append 可以把换行规范化放进流读取链,避免一次性读入大文件。本文用可复查的代码说明过滤器注册、读取边界、资源关闭和内存检查。134 收藏 -
文章 · php教程 | 1星期前 | PHP · 并发控制 · 线上排查 · 会话管理 · 配置验收 · php session.save_path PHP会话 session_write_close session.lazy_write
PHP session.lazy_write 默认只在会话数据发生变化时重写文件,排查时容易把正常行为误判为会话丢失。本文从 session.save_path、文件权限、会话锁和 session_write_close 入手,给出可复现的核对脚本与上线检查清单。469 收藏 -
用 PHP Reflection API 检查联合类型参数时,先区分 ReflectionNamedType 与 ReflectionUnionType,再处理 nullable 标记,避免把 null、单类型和多类型混成一个判断分支。346 收藏 -
文章 · php教程 | 1星期前 | 反射 · attribute · php教程 · PHP 8 · 代码验收 · php ReflectionClass Attribute ReflectionAttribute getAttributes isRepeated
PHP 8 的 Attribute 读取不是简单遍历字符串:ReflectionClass::getAttributes() 的名称过滤、ReflectionAttribute::IS_INSTANCEOF、isRepeated()、getArguments() 和 newInstance() 分别解决不同的验收问题。本文用一个可运行的注解扫描器拆开继承筛选、重复声明和参数校验边界。134 收藏 -
PDOStatement::fetchColumn() 读取单列很方便,但 0、NULL、false 和无结果分别代表什么,不能靠 if 判断猜。本文用 PHP PDO 查询场景拆开返回值边界,并给出行存在性、空值和布尔字段的验收写法。147 收藏 -
SPLFixedArray 适合固定长度、按整数下标顺序消费的批处理缓存,但不适合需要稀疏键、频繁扩容或复杂关联字段的场景。本文用可运行示例核对输入、校验、顺序读取和内存观测边界。477 收藏 -
PHP Generator 结束后进程内存没有回落,往往不是 yield 本身泄漏,而是迭代器仍被引用、foreach 引用残留或 finally 尚未完成。本文用可复现实验拆解判断顺序。254 收藏 -
SplPriorityQueue 是最大堆,同优先级元素的取出顺序没有稳定性保证。本文用可运行示例解释 compare 返回值、数组优先级和稳定顺序的实现边界。358 收藏 -
PHP 的 SensitiveParameter 与 SensitiveParameterValue 可以让堆栈中的敏感参数显示为脱敏对象,但它不等于日志系统自动脱敏。本文用异常堆栈、调试输出和结构化日志三个场景说明标注方式、getValue() 边界与验收方法。387 收藏 -
PHP 日期计算里,1 月 31 日加一个月并不一定得到 2 月最后一天。本文对比 DateTimeImmutable 的 modify、显式锚定月初再回退一天等写法,给出可验证的选择边界。254 收藏 -
用 DateTimeZone::getTransitions 读取时区偏移变更,再结合 DateTimeImmutable 做缺口时间和重复时间的核对,避免把固定 UTC 偏移当成地区时区。348 收藏 -
PHP 8.3 引入的 #[\Override] 可以在继承方法改名、接口调整或父类重构时尽早暴露契约断裂。本文用一个订单服务重构场景,拆解属性放置、编译期报错、接口实现和部署前回归检查。438 收藏