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
相关产品推荐
相关产品推荐

