You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8类型声明竖线含义及PHP7.4兼容改写方法

问题原因

你代码里的竖线是PHP 8.0新增的**联合类型(Union Types)**语法,作用是声明参数可以同时支持多种类型,你给出的代码里的含义是$time参数允许传入int整数、\DateInterval实例或者null值。
PHP 7.4版本不支持联合类型语法,所以解析代码时会直接抛出ParseError错误。

兼容PHP 7.4的改写方案

根据代码场景不同有两种改写方式:

场景1:接口/抽象类的方法声明

可以删除参数前的联合类型声明,改用PHPDoc标注参数类型即可:

/**
 * @param int|\DateInterval|null $time 超时时间
 */
public function expiresAfter($time);

场景2:普通类的可实现方法

可以删除参数前的联合类型声明,在方法内部手动做类型校验,保证参数符合要求:

public function expiresAfter($time)
{
    // 手动校验参数类型
    if (!is_int($time) && !($time instanceof \DateInterval) && $time !== null) {
        throw new \InvalidArgumentException('参数$time仅支持int类型、DateInterval实例或null');
    }
    
    // 此处保留原有方法逻辑
}

补充说明:如果这段代码是第三方依赖包的源码,不建议直接修改源码,可以降级对应依赖包到支持PHP 7.4的版本,避免后续依赖升级覆盖修改内容。


内容的提问来源于stack exchange,提问作者Vedaant Arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:39:03