严格标准:只有变量应该通过引用分配 PHP 5.4。

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

Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\alous\include\dbconn.php on line 4

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中禁用Strict Standards!我想修复我的PHP代码。


如果您将第4行修改为$conn = ADONewConnection($config['db_type']);,警告是否会消失? - Ozair Kafray
2个回答

81

您应该删除&(和号)符号,这样第4行将会是这样:

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

这是因为ADONewConnection已经通过引用返回了一个对象。根据文档,将对对象的引用分配给引用的结果会导致自PHP 5.3.0起出现E_DEPRECATED消息。


6
他没有使用 new - sam
14
是的,在这种情况下应该移除 &,但不是因为 @sam 所提供的原因。简单来说,赋值操作的结果不是一个_变量_,这会导致出现 E_STRICT 信息,而不是使用 new 操作符时出现的 E_DEPRECATED 警告。实际上,如果 ADONewConnection() 函数 被设置为返回引用,则使用 =& 实际上是有效的。 - MrWhite
你能否添加为什么应该将其删除的原因(通过编辑您的答案,而不是在评论中)? - Peter Mortensen

10

这是因为您试图通过引用分配一个对象。去掉&符号,您的脚本应该按预期工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接