将服务器从 php 5.6 更新到 7.3,出现 PEAR 错误
Updated server from php 5.6 to 7.3, getting PEAR error
我最近将我的服务器 php 版本从 5.6 更新到 7.3。当我尝试加载页面时,我看到以下解析错误:
Parse error: syntax error, unexpected 'new' (T_NEW) in
/usr/share/pear/MDB2/Driver/mysqli.php on line 940
以上文件是pear自动安装的,这里是提示错误的部分:
938
939 $class_name = 'MDB2_Statement_'.$this->phptype;
940 $obj =& new $class_name($this, $statement, $positions, $query, $types, $result_types, $is_manip, $limit, $ offset);
941 $this->debug($query, __FUNCTION__, array('is_manip' => $is_manip, 'when' => 'post', 'result' => $obj));
942 return $obj;
943 }
944
我已经使用 pear upgrade-all 更新了所有 pear 包,重新启动了 httpd 并继续出现上述相同的错误。
您的问题出在 =&
,在 $obj =& new ...
中应该是 =
。对象不能、不应该、也不需要通过引用创建。这样的表达式在 PHP 5 中被弃用并在 PHP 7 中无效(参见 eval
对不同 PHP 版本的响应)。
百思不得其解为什么PEAR包里会有这个,这一定是很久以前的遗迹了。它没有比 $x =& [];
更有意义(这也会导致错误)。当一个对象被分配给一个变量时,该变量就变成了指向该对象的指针。因此:
$a = new stdClass();
var_dump($a);
// object(stdClass)#1 (0) {}
$b = $a;
var_dump($b);
// object(stdClass)#1 (0) {}
var_dump($a === $b);
// bool(true)
即:即使没有分配 $b =& $a
,两个变量默认指向同一个对象(即指向 object(stdClass)#1
)。清理这些并给 PEAR 包维护者留下一个注释。仅供参考,MDB2_Driver_mysqli package was last updated on 2012-10-23, so fetching the latest updates won't help much. Look for an up-to-date replacement. (Core PHP has had mysqli
built in since PHP 5 and also has PDO 如果您需要不同 RDBM 之间的代码可移植性)。
我最近将我的服务器 php 版本从 5.6 更新到 7.3。当我尝试加载页面时,我看到以下解析错误:
Parse error: syntax error, unexpected 'new' (T_NEW) in /usr/share/pear/MDB2/Driver/mysqli.php on line 940
以上文件是pear自动安装的,这里是提示错误的部分:
938
939 $class_name = 'MDB2_Statement_'.$this->phptype;
940 $obj =& new $class_name($this, $statement, $positions, $query, $types, $result_types, $is_manip, $limit, $ offset);
941 $this->debug($query, __FUNCTION__, array('is_manip' => $is_manip, 'when' => 'post', 'result' => $obj));
942 return $obj;
943 }
944
我已经使用 pear upgrade-all 更新了所有 pear 包,重新启动了 httpd 并继续出现上述相同的错误。
您的问题出在 =&
,在 $obj =& new ...
中应该是 =
。对象不能、不应该、也不需要通过引用创建。这样的表达式在 PHP 5 中被弃用并在 PHP 7 中无效(参见 eval
对不同 PHP 版本的响应)。
百思不得其解为什么PEAR包里会有这个,这一定是很久以前的遗迹了。它没有比 $x =& [];
更有意义(这也会导致错误)。当一个对象被分配给一个变量时,该变量就变成了指向该对象的指针。因此:
$a = new stdClass();
var_dump($a);
// object(stdClass)#1 (0) {}
$b = $a;
var_dump($b);
// object(stdClass)#1 (0) {}
var_dump($a === $b);
// bool(true)
即:即使没有分配 $b =& $a
,两个变量默认指向同一个对象(即指向 object(stdClass)#1
)。清理这些并给 PEAR 包维护者留下一个注释。仅供参考,MDB2_Driver_mysqli package was last updated on 2012-10-23, so fetching the latest updates won't help much. Look for an up-to-date replacement. (Core PHP has had mysqli
built in since PHP 5 and also has PDO 如果您需要不同 RDBM 之间的代码可移植性)。