Codeigniter php7 个错误

Codeigniter php7 errors

我在 Codeigniter 2 上有一个站点,当我将服务器版本切换到 PHP7 时,出现以下两个错误:

遇到了一个PHP错误 严重性:通知 消息:仅应通过引用分配变量 文件名:core/Controller.php 行号:51

$this->load->_base_classes =& is_loaded();

遇到了一个PHP错误 严重性:8192 消息:与 class 同名的方法在 PHP 的未来版本中将不是构造函数; CI_DB_driver 有一个已弃用的构造函数 文件名:database/DB_driver.php 行号:31

有谁知道如何修复它们?

Only variables should be assigned by reference

这个错误不是 PHP 7 独有的,你也会在旧版本中遇到它。无论如何,我认为这里的问题出在 is_loaded() 而不是 return 正确引用。它是否 return 通过引用(是否像 function &is_loaded())?如果没有,它需要。 return 是变量还是表达式?如果它不是变量,则需要先将其放入一个变量中,然后才能 return 引用它。

PHP 此错误的手册页:http://php.net/manual/en/language.references.return.php

Methods with the same name as their class will not be constructors in a future version of PHP; CI_DB_driver has a deprecated constructor

在 PHP 4 中,您通过将其命名为与 class 相同来创建构造函数方法。因此,如果您的 class 是 class FooBar,您的构造函数将是 public function FooBar。不过,在 PHP 5 及更高版本中,构造函数的推荐名称是 __construct。因此,去编辑 class 并重命名其构造函数以消除弃用错误。请务必查看任何扩展 classes 以查看它们是否也调用该构造函数方法,以便您可以更改它们。

查看升级指南:http://php.net/manual/en/migration70.deprecated.php

另见 RFC:https://wiki.php.net/rfc/remove_php4_constructors

最终我刚刚将 CI 核心更新到 CodeIgniter 2.2.6。必须将数据库驱动程序更改为 mysqli(因为 php7 不再支持 mysql)和数据库中的 re-added ci_sessions table(不知道为什么)。并且非常有效!