已弃用 - 与其 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
。
在 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
。