php教程技术文章
-
PHP curl_multi_select 返回 0 表示本轮没有活动描述符,不是请求失败。通过短暂让出 CPU 后继续 curl_multi_exec,并读取完成消息,可以避免多请求循环忙等。191 收藏 -
通过一个可暂停任务包装器,说明 PHP Fiber 的 start、suspend、resume、throw 和 getReturn 如何配合,并给出异常传播与状态判断的实现边界。187 收藏 -
PDO::rollBack() 并不保证能撤销事务里的 DDL。以 PDO_MYSQL 和 MySQL 为例,CREATE TABLE、ALTER TABLE 等 DDL 可能先隐式提交当前事务,正确做法是把结构迁移与业务数据事务分开。185 收藏 -
PHP header_remove 只能移除尚未完成发送的 PHP 响应头。本文用请求生命周期解释已有输出、输出缓冲和代理层头部的边界,并给出 headers_sent() 排查与 ob_start() 调整时序的写法。180 收藏 -
说明 PHP readonly class 的真实边界,对比配置快照、值对象和领域实体的生命周期,并给出可变实体组合只读值对象的实用建模方案。178 收藏 -
PHP Fiber 只负责暂停和恢复调用栈,不会把 file_get_contents 等阻塞 I/O 自动变成异步。本文从 suspend、resume、throw 的契约出发,说明如何让事件循环在流可读时恢复 Fiber、在超时或错误时抛出异常,并划清单线程协作式切换与真正并行的边界。176 收藏 -
PHP readonly 锁住的是属性重新绑定,不会自动冻结对象内部状态。本文用最小示例拆开重新赋值、内部修改、克隆和版本差异,帮助你为只读对象选择正确的封装边界。175 收藏 -
PHP 8.4 的 array_find 会按顺序返回第一个满足回调条件的数组值。本文说明值与键的回调参数、null 歧义、array_find_key 的配合方式,以及旧版本兼容写法。174 收藏 -
Composer 插件会在 Composer 运行时改变安装、下载或命令行为。本文比较 allow-plugins 的精确白名单、组织通配符、全部允许和全部禁止策略,给出适合项目、CI 与生产环境的配置边界。170 收藏 -
PHP 文件上传不能只看文件名后缀,应在保存前同时检查上传错误码、服务端文件大小、扩展名白名单和 Fileinfo 检测出的 MIME,并使用随机文件名与 move_uploaded_file 落盘。本文给出完整处理器、表单接入和验收清单。167 收藏 -
PHP 8.4 属性钩子可以在属性边界集中处理校验、标准化和派生值,减少重复 getter/setter。本文用 backed 与 virtual 属性示例说明最小写法,并梳理 readonly、数组间接修改和构造器提升的边界。165 收藏 -
mb_str_split 没有分隔符和 offset 参数。本文用 mb_substr、mb_strpos 与 preg_split 组合处理中文字符串的字符偏移、分隔符保留和边界情况。164 收藏 -
Composer classmap 更新后仍找不到类,通常不是命令没执行,而是映射、命名空间、运行入口或部署目录仍有一处不一致。本文按故障现场拆解判断与修复步骤。162 收藏 -
PHP 8.5 将 PDO 驱动专属常量标记为弃用,本文按 MySQL、SQLite、PgSQL 等驱动整理替换代码、兼容边界与回归检查清单。162 收藏 -
PHP Generator 的 yield 用于逐条输出数据,return 用于返回最终汇总;本文说明如何在迭代结束后通过 getReturn() 安全取值,并解释提前读取、空返回和 yield from 的边界。157 收藏