我所见过的PHP严格标准是(ini_get('error_reporting') & E_STRICT) == true
时报告的错误。以错误驱动的方式纠正这些错误似乎不是最佳的。
因此,为了编写完全符合PHP严格标准的代码,我想阅读其中定义的内容。我在哪里可以找到PHP严格标准?
我所做的所有搜索只会导致如何修复严格标准报告的任意错误的指示,但绝不会严格标准本身。任何人都可以提供链接吗?
答案 0 :(得分:8)
了解E_STRICT
被发射的所有可能性的唯一方法是查找寻找E_STRICT
的源。基本上,请看主分支:http://lxr.php.net/search?q=&defs=&refs=E_STRICT&path=Zend%2F&hist=&project=PHP_TRUNK。请注意,在某些情况下,master可能会因出现E_STRICT
错误以及何时出现错误而与特定版本不同。
当然,如果不了解C和一些常见的内部术语,理解PHP的来源将是困难的。
答案 1 :(得分:8)
下面是PHP 5.6中可能存在的E_STRICT
错误消息和捆绑扩展(源自http://lxr.php.net/s?refs=E_STRICT&project=PHP_5_6)的完整列表,以及会激发它们的简短代码示例。
在PHP 5.5中,调用任何mysql_*
函数也会生成E_STRICT
,从PHP 5.6开始,它会生成E_NOTICE
。
可能有其他地方在PECL扩展中发出它们,如果你找到它们,可以在这里编辑它们。
class ClassName
{
public static $propName = 1;
}
$o = new ClassName;
echo $o->propName; // error here
$fp = fopen('file.txt', 'r');
$array[$fp] = 'something'; // error here
// it's worth noting that an explicit cast to int has the same effect with no error:
$array[(int)$fp] = 'something'; //works
class ClassName
{
public function methodName()
{
return 1;
}
}
echo ClassName::methodName(); // error here
function func()
{
return 1;
}
$var = &func(); // error here
function func(&$arg)
{
$arg = 1;
}
function func2()
{
return 0;
}
func(func2()); // error here
abstract class ClassName
{
abstract public static function methodName(); // error here
}
class OtherClassName extends ClassName
{
public static function methodName()
{
return 1;
}
}
// Emitted when both a PHP4-style and PHP5-style constructor are declared in a class
class ClassName
{
public function ClassName($arg)
{
}
public function __construct($arg) // error here
{
}
}
// Emitted when a class declaration violates the Liskov Substitution Principle
// http://en.wikipedia.org/wiki/Liskov_substitution_principle
class OtherClassName
{
public function methodName()
{
return 1;
}
}
class ClassName extends OtherClassName
{
public function methodName($arg) // error here
{
return $arg + 1;
}
}
// Emitted when calling mktime() with no arguments
$time = mktime(); // error here
// Emitted when using a multi-byte character set that is not UTF-8 with
// htmlentities and some related functions
echo htmlentities("<Stuff>", ENT_COMPAT | ENT_HTML401, '936'); // error here
// Emitted by mysqli_next_result() when there are no more results
do {
// stuff
} while (mysqli_next_result($link)); // error here
答案 2 :(得分:0)
没有一个统一的地方列出所有严格的错误,但我也不一定会期望。该列表将巨大。
您可以做的是查找E_STRICT通知。列出这些的常见位置是在PHP次要版本(即5.X)发布时推出的迁移列表。这是5.4 backwards incompatability list,它显示了现在有E_STRICT
个通知的内容。我认为这是你能得到的最好的。