严格的标准:B :: foo()的声明应该与A :: foo()的声明兼容

时间:2015-12-10 06:08:53

标签: php

我正在使用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()的声明兼容”。

那么,这是怎么发生的,为什么在我把它分成两个文件之后会显示这条消息呢?

1 个答案:

答案 0 :(得分:0)

你的B班应该是这样的:

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

5.3似乎在一种情况下是宽容的,而在另一种情况下则不是。我使用的是PHP 7,您的第一个示例将抛出相同的Strict标准消息。

在开发时,enable E_STRICT以便您可以捕获宽容的约束。