1

我安装了 PHP 8.1,但出现了关于已弃用函数的错误。您对此有什么想法并解决它吗?

已弃用:OM\Db::prepare(string $statement, $driver_options = null) 的返回类型应与 PDO::prepare(string $query, array $options = []): PDOStatement|false 或 # 兼容应使用 [\ReturnTypeWillChange] 属性暂时抑制第 114 行 //OM/Db.php 中的通知

114 号线

protected ?array $driver_options = null;
protected ?array $options = null;

public function prepare(string $statement, ?array $driver_options = null) //php8
{
  $statement = $this->autoPrefixTables($statement);

  $DbStatement = parent::prepare($statement, \is_array($driver_options) ? $driver_options : []);
  $DbStatement->setQueryCall('prepare');
  $DbStatement->setPDO($this);

  return $DbStatement;
}
4

1 回答 1

1

PHP 8.1 为大多数内部函数/方法添加了返回类型声明。然而,由于这样的改变会破坏很多现有的继承,返回类型只是暂时指定的。在重新定义的方法的签名与父类的签名不匹配的所有情况下,都会发出弃用通知。

在您的情况下,该类扩展了 PDO。您重新定义了方法prepare,但没有为您的方法指定返回值,默认为mixed. As mixedis not the same as PDOStatement|falsePHP 警告您这种不一致。

解决方案可以是向重新定义的方法添加相同的返回类型声明(由于联合类型,仅从 PHP 8.0 起有效)或添加临时属性以使警告静音。例如

#[\ReturnTypeWillChange]
public function prepare(string $statement, ?array $driver_options = null) //php8
{
    // ...

即使您的代码支持旧版 PHP 版本,也可以添加该属性。如果您的代码仅支持 PHP 8.0+,那么只需添加正确的返回类型声明。

于 2021-12-18T12:57:57.500 回答