php教程技术文章
-
PHP readonly 锁住的是属性重新绑定,不会自动冻结对象内部状态。本文用最小示例拆开重新赋值、内部修改、克隆和版本差异,帮助你为只读对象选择正确的封装边界。175 收藏 -
PHP curl_multi 适合把多个 HTTP 请求放进同一批次,但并发数、超时、句柄回收和失败重试必须一起设计。本文用一个可控批处理示例讲清请求收敛和验收边界。174 收藏 -
PHP 8.4 的 array_find 会按顺序返回第一个满足回调条件的数组值。本文说明值与键的回调参数、null 歧义、array_find_key 的配合方式,以及旧版本兼容写法。174 收藏 -
PHP 使用 ZipArchive 打包文件时,把 addFile 的第二个参数设为相对 entryname,就能去掉服务器目录前缀;本文进一步说明递归目录、路径分隔符、文件可读性和 close 失败的处理方式。168 收藏 -
PHP 8.4 属性钩子可以在属性边界集中处理校验、标准化和派生值,减少重复 getter/setter。本文用 backed 与 virtual 属性示例说明最小写法,并梳理 readonly、数组间接修改和构造器提升的边界。165 收藏 -
PHP 默认文件会话在同一用户并发请求下容易因为会话锁排队,接口越慢越明显。优化思路不是简单换 Redis,而是先缩短会话锁持有时间,再把会话存储迁到 Redis,并补上 TTL、回退和监控信号。164 收藏 -
PHP 8.5 允许静态闭包和一等可调用出现在常量表达式中,属性参数因此可以直接承载校验器或处理器。本文从路由属性场景出发,拆开 PHP 8.4 与 8.5 的解析边界,并用 Reflection 和 CI 检查兼容性。164 收藏 -
mb_str_split 没有分隔符和 offset 参数。本文用 mb_substr、mb_strpos 与 preg_split 组合处理中文字符串的字符偏移、分隔符保留和边界情况。164 收藏 -
PHP 8.2 提供的 ini_parse_quantity 能把 ini 风格容量解析成字节,但非法单位会发出警告并按兼容规则解释。本文用配置校验器拆开单位换算、整数溢出和上线验收边界。163 收藏 -
Composer classmap 更新后仍找不到类,通常不是命令没执行,而是映射、命名空间、运行入口或部署目录仍有一处不一致。本文按故障现场拆解判断与修复步骤。162 收藏 -
PHP Generator 使用 yield from 委托子迭代器时,外层遍历拿到的是 yield 值,子 Generator 的 return 值要等委托完成后通过 getReturn 读取。本文用可运行示例说明调用链、完成条件和常见误区。161 收藏 -
文章 · php教程 | 1个月前 | 反射 · PHP · PHP 8.5 · 兼容性 · php PHP 8.5 ReflectionAttribute DelayedTargetValidation 属性目标
PHP 8.5 的 DelayedTargetValidation 不是放宽属性规则,而是把内置属性目标的错误从编译阶段延后到反射运行阶段,适合维护跨 PHP 版本的库代码。159 收藏 -
用 DOMXPath 读取 XML 时,节点查询、count() 和 string() 返回的类型不同。本文用最小 PHP 示例说明如何判断返回值、处理空节点集,并把结果安全地转换成业务字段。158 收藏 -
文章 · php教程 | 1个月前 | 反射 · 单元测试 · php教程 · php ReflectionClass newInstanceWithoutConstructor ReflectionProperty isInitialized 遗留代码测试
PHP 反射可以创建一个不执行构造函数的对象,适合给遗留类做边界测试,但未初始化属性仍可能在读取时抛出 Error。本文用 ReflectionClass、ReflectionProperty 和 isInitialized() 演示安全的测试夹具写法。157 收藏 -
PHP Generator 的 yield 用于逐条输出数据,return 用于返回最终汇总;本文说明如何在迭代结束后通过 getReturn() 安全取值,并解释提前读取、空返回和 yield from 的边界。157 收藏