繁体   English   中英

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

[英]Where can I find the PHP Strict Standards Definitions

(ini_get('error_reporting') & E_STRICT) == true时,我见过的所有PHP严格标准都是错误报告。 以错误驱动的方式纠正这些错误似乎不是最佳方法。

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

我所做的所有搜索仅导致有关如何解决严格标准报告的任意错误的说明,而从不指导严格标准本身。 任何人都可以提供链接吗?

知道在何处发出E_STRICT所有可能性的唯一方法是grep寻找E_STRICT的源。 基本上,请看这里的master分支: http : //lxr.php.net/search?q=&defs=&refs=E_STRICT&path=Zend%2F&hist=&project=PHP_TRUNK 请注意,在某些情况下,master可能与特定版本有所不同,出现什么E_STRICT错误以及何时引发。

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

以下是PHP 5.6和捆绑的扩展名(源自http://lxr.php.net/s?refs=E_STRICT&project=PHP_5_6 )中可能的E_STRICT错误消息的完整列表,以及将引起这些错误的简短代码示例。

在PHP 5.5中,调用任何mysql_*函数也会产生E_STRICT ,从PHP 5.6开始,它将产生E_NOTICE

PECL扩展中可能还有其他发出它们的地方,如果您发现它们,请随时在此处进行编辑。


将静态属性ClassName :: $ propName访问为非静态

class ClassName
{
    public static $propName = 1;
}
$o = new ClassName;
echo $o->propName; // error here

资源ID#1用作偏移量,转换为整数(1)

$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

非静态方法ClassName :: methodName()不应被静态调用(可以包含其他文本:假定来自兼容上下文OtherClassName的$ this)

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

静态函数ClassName :: methodName()不应为抽象

abstract class ClassName
{
    abstract public static function methodName(); // error here
}
class OtherClassName extends ClassName
{
    public static function methodName()
    {
        return 1;
    }
}

重新定义类ClassName的已定义构造函数

// 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
    {
    }
}

ClassName :: methodName()的声明应与OtherClassName :: methodName()兼容

// 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;
    }
}

您应该改用time()函数

// Emitted when calling mktime() with no arguments
$time = mktime(); // error here

对于UTF-8以外的多字节编码,仅支持基本实体替换。 功能等效于htmlspecialchars

// 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

没有下一个结果集。 请调用mysqli_stmt_more_results()/ mysqli_stmt :: more_results()检查是否调用此函数/方法

// Emitted by mysqli_next_result() when there are no more results
do {
    // stuff
} while (mysqli_next_result($link)); // error here

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

您可以做的是查找E_STRICT通知。 列出这些的一个常见地方是在发行PHP次要版本(即5.X)时发布的迁移列表。 这是5.4向后不兼容列表 ,该列表显示E_STRICT现在注意到的内容。 我认为这是最好的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM