php教程技术文章
-
文章 · php教程 | 2星期前 | 反射 · php教程 · ReflectionParameter getAttributes PHP attributes Attribute::IS_REPEATABLE 重复属性
PHP 重复 Attribute 不能靠读取端猜测,必须先在属性类声明中加入 Attribute::IS_REPEATABLE,再用 ReflectionParameter::getAttributes() 取得全部实例,并根据 getArguments 或 newInstance 的需要选择读取方式。261 收藏 -
使用 PHP curl_multi 并发请求时,通过 curl_multi_info_read() 获取已完成的单个句柄,再结合 CURLOPT_PRIVATE、传输结果和 HTTP 状态准确归属与处理响应。223 收藏 -
PHP stream_set_timeout 不会直接抛出超时异常,读取后应紧接着用 stream_get_meta_data 检查 timed_out,再结合 feof 和读取返回值区分超时、EOF 与读取错误。199 收藏 -
PHP backed enum 处理请求参数时,from() 失败会抛出 ValueError,tryFrom() 失败返回 null。本文说明如何清洗外部值、映射稳定业务错误,并让领域服务只接收合法枚举。467 收藏 -
解释 PHP match 没有命中分支时抛出 UnhandledMatchError 的原因,并用 default、显式异常和输入归一化设计可靠的默认结果。100 收藏 -
PHP json_decode 返回 null 不一定是语法错误,深层 JSON 超过 depth 时会产生 JSON_ERROR_DEPTH。本文用异常、错误码和轻量结构扫描区分问题,并给出生产环境的深度上限与排查写法。488 收藏 -
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 收藏