Устаревший - методы с тем же именем, что и их класс, не будут конструкторами в будущей версии 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 я получил эту ошибку:

Устаревший: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; Ошибка содержит устаревший конструктор в /usr/local/IBSng/interface/IBSng/inc/errors.php в строке 12

Неустранимая ошибка: невозможно объявить класс Error, так как имя уже используется в /usr/local/IBSng/interface/IBSng/inc/errors.php в строке 12

Что означает эта фатальная ошибка и как я могу это исправить?

2 ответа

Решение

Просто добавить в

@Powerlord Отличный ответ

Я бы также переименовал эту функцию / метод

function Error

В PHP4 конструктор был назван так же, как класс. Это имело некоторые ограничения для рефакторинга кода, копирования классов и т. Д. Как вы должны были помнить, переименовывать их.

В коде неясно, было ли это изначально __construct метод или нет. Ни одно из внутренних свойств класса не модифицировано (внешним) для этого метода, поэтому возможно, что его можно вызывать несколько раз за экземпляр. Но если это "конструктор", то непременно __construct()

PS. вы можете захотеть "пространство имен" или переименовать этот класс, как указано в ответе @ Powerlord.

И я бы не использовал __method печатать имена, как мне некрасиво... лол

Я обрезал зубы в PHP из-за этих ошибок... смеется. Первая профессиональная работа, с которой я работал, - перенос сайта 4.x в 5.3 - Это было примерно в 2008 году (спасибо за воспоминания PHP4)

Вы получаете сообщение об ошибке, потому что PHP7 имеет свой собственный Error класс, так что вы не можете назвать свой собственный класс Error,

Другие вопросы по тегам