7

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

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

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

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

有谁知道如何解决它们?

4

2 回答 2

13

最终,我刚刚将 CI 核心更新为 CodeIgniter 2.2.6。不得不将 DB 驱动程序更改为 mysqli(因为 php7 不再支持 mysql)并在数据库中重新添加 ci_sessions 表(不知道为什么)。就像一个魅力!

于 2016-01-21T14:00:02.553 回答
2

只有变量应该通过引用分配

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

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

在 PHP 的未来版本中,与其类同名的方法将不再是构造函数;CI_DB_driver 有一个弃用的构造函数

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

请参阅升级指南: http: //php.net/manual/en/migration70.deprecated.php

另请参阅 RFC:https ://wiki.php.net/rfc/remove_php4_constructors

于 2015-12-13T15:35:24.907 回答