【问题标题】:Strict Standards: Only variables should be assigned by reference PHP 5.4严格标准:只能通过引用 PHP 5.4 分配变量
【发布时间】:2023-03-28 16:02:02
【问题描述】:

我将我的 PHP 版本升级到 5.4(XAMPP 1.7.3 到 1.8.0)。现在我看到 Strict Standards 错误,myDBconnection:

严格标准:只有变量应该在第 4 行的 C:\xampp\htdocs\alous\include\dbconn.php 中通过引用进行分配

dbconn.php:

<?php
    defined('_VALID') or die('Restricted Access!');

    $conn = &ADONewConnection($config['db_type']); // <--- This Line 4

    if ( !$conn->Connect($config['db_host'],
                         $config['db_user'],
                         $config['db_pass'],
                         $config['db_name'])) {

        echo 'Could not connect to MySQL! Please check your database settings!';
        die();
    }
    $conn->execute("SET NAMES 'utf8'");
?>

注意:我不需要用这个方法在 php.ini 中禁用严格标准error_reporting = E_ALL &amp; ~E_NOTICE &amp; ~E_STRICT!我想修复我的 PHP 代码。

【问题讨论】:

  • 如果将第4行修改为$conn = ADONewConnection($config['db_type']);,警告是否消失

标签: php reference porting


【解决方案1】:

您应该删除&amp;(和号)符号,这样第 4 行将如下所示:

$conn = ADONewConnection($config['db_type']);

这是因为 ADONewConnection 已经通过引用返回了一个对象。根据documentation,从 PHP 5.3.0 开始,通过引用将引用的结果分配给对象会导致 E_DEPRECATED 消息

【讨论】:

  • 他没有使用new
  • 是的,&amp; 在这种情况下应该被删除,但不是因为给出的原因(正如@sam 建议的那样)。很简单,赋值的结果不是变量,这会导致 E_STRICT 消息,而不是 E_DEPRECATED 警告,new 运算符会发生这种情况。事实上,如果 ADONewConnection() function 设置为 return a reference,则使用 =&amp; 实际上可能是有效的。
  • 你能补充一下为什么应该删除它的原因吗(editing your answer - 不在 cmets 中)?
【解决方案2】:

这是因为您试图通过引用分配对象。删除 & 符号,您的脚本应该可以按预期工作。

【讨论】:

    最近更新 更多