在哪里可以找到PHP严格标准定义

在哪里可以找到PHP严格标准定义,php,strict,Php,Strict,我所看到的PHP严格标准都是在(ini_get('error_reporting')&E_Strict)==true时报告的错误。以错误驱动的方式纠正这些错误似乎不是最优的 所以,为了编写完全符合PHP严格标准的开箱即用的代码,我想阅读其中定义的内容。在哪里可以找到PHP严格标准 我所做的所有搜索只会导致如何修复严格标准报告的一些任意错误的说明,而严格标准本身却没有。任何人都可以提供一个链接吗?要知道E\u STRICT的所有可能发出的位置,唯一的方法是grep源代码,查找E\u STRICT。

我所看到的PHP严格标准都是在
(ini_get('error_reporting')&E_Strict)==true
时报告的错误。以错误驱动的方式纠正这些错误似乎不是最优的

所以,为了编写完全符合PHP严格标准的开箱即用的代码,我想阅读其中定义的内容。在哪里可以找到PHP严格标准


我所做的所有搜索只会导致如何修复严格标准报告的一些任意错误的说明,而严格标准本身却没有。任何人都可以提供一个链接吗?

要知道
E\u STRICT
的所有可能发出的位置,唯一的方法是grep源代码,查找
E\u STRICT
。基本上,请看这里的主分支:。请注意,在某些情况下,master可能与特定版本的不同之处在于引发错误的内容和时间


当然,如果不了解C和一些常见的内部术语,理解PHP的源代码将是困难的。

没有一个统一的地方列出所有严格的错误,但我也不一定期望有一个。这个列表将是巨大的


你能做的就是寻找通知。列出这些内容的一个常见位置是当PHP次要版本(即5.X)发布时发布的迁移列表。下面是一个示例,它显示了现在出现的
E\u STRICT
注意事项。我想这是你能得到的最好的了。

下面是PHP5.6中可能出现的
E_STRICT
错误消息的完整列表和捆绑扩展(源自),以及一个简短的代码示例,可以激发它们

在PHP5.5中,调用任何
mysql.*
函数也会产生
E\u STRICT
,从PHP5.6开始,它会产生
E\u通知

在PECL扩展中可能还有其他地方发出它们,如果您找到了,可以在这里自由编辑它们


访问静态属性ClassName::$propName作为非静态属性
类名
{
公共静态$propName=1;
}
$o=新类名;
echo$o->propName;//这里出错

资源ID#1用作偏移量,转换为整数(1)
$fp=fopen('file.txt','r');
$array[$fp]=“某物”;//这里出错
//值得注意的是,显式转换为int具有相同的效果,没有错误:
$array[(int)$fp]=“某物”//作品

不应静态调用非静态方法ClassName::methodName()(可能包括其他文本:假设$this来自兼容上下文OtherClassName)
类名
{
公共函数methodName()
{
返回1;
}
}
echo ClassName::methodName();//这里出错

只能通过引用来分配变量
函数func()
{
返回1;
}
$var=&func();//这里出错

只能通过引用传递变量
函数func(&$arg)
{
$arg=1;
}
函数func2()
{
返回0;
}
func(func2());//这里出错

静态函数ClassName::methodName()不应是抽象的
抽象类类名
{
抽象公共静态函数methodName();//此处出错
}
类OtherClassName扩展了ClassName
{
公共静态函数methodName()
{
返回1;
}
}

重新定义类ClassName的已定义构造函数
//在类中同时声明PHP4样式和PHP5样式构造函数时发出
类名
{
公共函数类名称($arg)
{
}
公共函数_构造($arg)//此处出错
{
}
}

ClassName::methodName()的声明应与其他ClassName::methodName()兼容
//当类声明违反Liskov替换原则时发出
// http://en.wikipedia.org/wiki/Liskov_substitution_principle
类OtherClassName
{
公共函数methodName()
{
返回1;
}
}
类ClassName扩展了OtherClassName
{
公共函数methodName($arg)//此处出错
{
返回$arg+1;
}
}

您应该改为使用time()函数
//在调用没有参数的mktime()时发出
$time=mktime();//这里出错

对于UTF-8以外的多字节编码,仅支持基本实体替换;功能相当于htmlspecialchars
//使用非UTF-8的多字节字符集时发出
//htmlentities及其相关函数
echo Htmlenties(“,ENT_COMPAT | ENT_HTML401,'936');//这里出错

没有下一个结果集。请调用mysqli_stmt_more_results()/mysqli_stmt::more_results()检查是否调用此函数/方法
//当没有更多结果时,由mysqli_next_result()发出
做{
//东西
}while(mysqli_next_result($link));//这里出错

我不确定是否存在最终列表,但它应该存在。澄清:你想知道发出
E\u STRICT
的所有可能性吗?澄清:是的,绝对。我们谈论的是严格的标准。我真的很想知道这些标准是什么,以一种连贯的方式,而不是通过编写有史以来最容易出错的代码和评估错误日志。为了进一步澄清,我真的不希望所有的E_Strict被抛出,更希望标准的完整和一致的定义。当违反这些规则时,应始终抛出E_Strict。可能重复尼斯列表。我必须记住,谢谢你的链接,但是如果这是追踪PHP严格标准的方法,那么我们谈论的是标准这个词的一个非常猥亵的用法。这或多或少会给您带来错误驱动的开发。如果没有人能想出更人性化的答案,我会接受这个答案。但是我仍然有希望,尽管我们正在谈论PHP