已弃用 - 与其 class 同名的方法在 PHP 的未来版本中将不再是构造函数

Deprecated - Methods with the same name as their class will not be constructors in a future version of PHP

在 php v 5 这些 php 代码没有问题:

<?php

$ERRORS=array("INVALID_ERROR"=>"Invalid/Unknown error",
              "ACCESS_DENIED"=>"Access Denied",
              "INVALID_INPUT"=>"Invalid Input",
              "INCOMPLETE_REQUEST"=>"INCOMPLETE REQUEST"
            );

class Error
{ /* This Class is for errors reported from core or interface.
     Normally errors should consist of lines of ( keys and  messages), formated in a string like "key|msg"
     key shows what is error about and msg is the error message for this situation

  */
    function Error($err_str)
    {
        $this->raw_err_str=$err_str;
        $this->err_msgs=array();
        $this->err_keys=array();
        $this->__splitErrorLines();

    }

    function __splitErrorLines()
    {
        $err_lines=split("\n",$this->raw_err_str);
        foreach($err_lines as $line)
            $this->__splitError($line);
    }

    function __splitError($err_str)
    {
        $err_sp=split("\|",$err_str,2);
        if(sizeof($err_sp)==2)
        {
            $this->err_msgs[]=$err_sp[1];
            $this->err_keys[]=$err_sp[0];
        }    
        else
        {
            $this->err_msgs[]=$err_str;
            $this->err_keys[]="";
        }
    }

    function getErrorKeys()
    {/*
        Return an array of error keys
     */

        return $this->err_keys;
    }

    function getErrorMsgs()
    {/*
        Return array of error msgs
        useful for set_page_error method of smarty
     */
        return $this->err_msgs;
    }

    function getErrorMsg()
    {/* 
        Return an string of all error messages concatanated
     */
        $msgs="";
        foreach ($this->err_msgs as $msg)
            $msgs.=$msg;
        return $msgs;
    }

}

function error($error_key)
{/* return complete error message of $error_key */
    global $ERRORS;
    if (isset($ERRORS[$error_key]))
        return new Error($error_key."|".$ERRORS[$error_key]);
    else
        return new Error($ERRORS["INVALID_ERROR"]);
}

?>

但是在安装 php v7.3.2 之后我得到了这个错误:

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Error has a deprecated constructor in /usr/local/IBSng/interface/IBSng/inc/errors.php on line 12

Fatal error: Cannot declare class Error, because the name is already in use in /usr/local/IBSng/interface/IBSng/inc/errors.php on line 12

致命错误是什么意思,我该如何解决?

只是添加到

@Powerlord 优秀的回答

我也会重命名这个 function/method

function Error

在 PHP4 中,构造函数的名称与 class 相同。这对重构代码、复制 classes 等有一些限制。因为你必须记住重命名它们。

代码中不清楚这是否最初打算成为 __construct 方法。 class 的内部属性的 None 已修改(外部)到此方法,因此每个实例可能会调用多次。但如果它是 "constructor" 那么无论如何都称它为 __construct()

PS。正如@Powerlord 的回答所指出的,您可能也想 "namespace" 或重命名 class。

而且我会避免使用 __method 类型名称,因为它对我来说很难看...大声笑

我在 PHP 中因这些错误而咬牙切齿......大声笑。我的第一份专业工作是将网站从 4.x 迁移到 5.3 - 大约在 2008 年(感谢回忆 PHP4)

您遇到错误是因为 PHP7 有自己的 Error class,所以您不能命名自己的 class Error