【问题标题】:Strict standards: Declaration of B::foo() should be compatible with that of A::foo()严格的标准: B::foo() 的声明应该与 A::foo() 的声明兼容
【发布时间】:2015-12-10 06:08:53
【问题描述】:

我用的是php5.3.10,有一些问题代码是这样的:

<?php
class A {
    function foo($bar = 0) {}
}

class B extends A {
    function foo($bar) {}
}

没有显示 php 错误。

但是,如果我将代码分成两个文件,如下所示:

1.php

<?php
class A {
    function foo($bar = 0) {}
}

和

2.php

<?php
require '1.php';
class B extends A {
    function foo($bar) {}
}

它给了我一条信息“严格的标准:B::foo() 的声明应该与 A::foo() 的声明兼容”。

那么,这是怎么回事,为什么我将它分成两个文件后显示消息?

【问题讨论】:

    标签: php


    【解决方案1】:

    您的 B 类应该如下所示:

    class B extends A {
        function foo ($bar = 0) {} 
    }
    

    5.3 在一种情况下似乎是宽容的,而在另一种情况下却不是。我正在使用 PHP 7,而您的第一个示例引发了相同的严格标准消息。

    在开发时,enable E_STRICT 这样您就可以捕捉到宽容的约束。

    【讨论】:

    • 是的,我知道。我认为它应该是相同的,两种情况都应该显示信息,但它没有,我只是对这两种情况感到好奇
    • 我下载了 5.4 并且很好奇为什么严格检查是用 include/require 完成的,而不是其他的。我没有答案。如果我找到答案,我会在这里更新。我觉得你的问题很好。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多