php教程技术文章
-
DateTimeImmutable 的 modify() 不会改写原对象,而是返回新的日期对象。本文用 PHP 示例说明如何接住返回值、如何选择 DateTime 与 DateTimeImmutable,并提醒月末运算和异常处理边界。232 收藏 -
bindParam 绑定的是变量引用,真正取值发生在 execute 时。循环中反复改写或复用变量时,容易让多个参数都落到最后一次值;本文用批量写入示例说明原因,并给出 bindValue 与固定变量复用两种稳定写法。298 收藏 -
JSON_THROW_ON_ERROR 能让 PHP 解码失败直接抛出 JsonException,但异常并不会自动携带业务字段路径。本文用原始请求体、行列提示和字段级解码,建立一套可追踪的 JSON 错误记录方式。501 收藏 -
PHP 反射读取 readonly 属性并不等于可以随意处理属性:isReadOnly() 只看声明,isInitialized() 才能判断当前对象是否已有值。本文整理 PHP 8.1 之后的读取边界和迁移写法。194 收藏 -
PHP 8.6 的 Autoconf 2.71 与 C11 构建要求,主要影响从 Git 源码生成 configure 的脚本;发布压缩包和数据库运行时依赖应分别处理。380 收藏 -
PHP 8.4 的 lazy proxy 不应通过读取属性来判断是否已加载,因为读取本身可能触发 factory。本文用 ReflectionClass::isUninitializedLazyObject() 做无副作用检查,再说明 initializeLazyObject() 的显式初始化和 proxy、真实实例的身份边界。468 收藏 -
用 PHP curl_multi_exec 批量发送 HTTP 请求,正确轮询 curl_multi_info_read、等待 curl_multi_select、读取 curl_multi_getcontent,并区分多句柄错误、单请求错误和 HTTP 状态。260 收藏 -
用 PHP mb_substr 按 UTF-8 字符截取中文,区分 strlen 的字节长度,处理 mbstring、空值、省略号和边界测试。277 收藏 -
filter_var 返回 true 只说明 URL 结构符合 PHP 的校验规则,并不代表主机可解析、协议可用或域名属于业务白名单。本文用 PHP 示例拆开三层判断,补上安全的 host 白名单写法。403 收藏 -
登录成功后应轮换 PHP 会话 ID 来防止会话固定,但不宜用 session_regenerate_id(true) 立即删除旧数据。本文用保留窗口、旧 ID 标记和严格模式解释怎样避免移动网络或并发请求导致刚登录就掉线。186 收藏 -
Composer 的 files 适合每次引入自动加载器时加载的函数文件,classmap 适合无法遵循 PSR-4 的类;普通命名空间类优先 PSR-4。本文用配置示例和边界表说明如何选择。277 收藏 -
PHP array_filter 不传 callback 时会按 empty() 语义过滤,0、"0"、false、null 和空字符串都可能被删除。本文拆开默认参数、显式回调、键名保留和 array_values() 重排的边界,避免清洗数据时误删有效零值。347 收藏 -
DateTimeImmutable 用 modify('+1 month') 修改月底日期时不会自动截断到目标月末,而是按相对日期规则继续归一化。本文解释月份溢出的原因,并给出月底对齐、显式日号校正和回归测试写法。147 收藏 -
PHP PDO 一个占位符不能直接展开数组。本文解释 IN 查询绑定失败的原因,给出动态生成占位符、处理空数组、复查参数数量与异常模式的安全写法。186 收藏 -
用 PHP 的 Throwable、getPrevious() 和统一异常边界,把底层 PDO 错误留在服务端日志,同时向客户端返回安全、稳定的错误响应。203 收藏