Re: __constructor parameter limitations.
| From: | Reindl Harald | Date: | Sat, 17 Sep 2011 18:17:04 +0000 |
| Subject: | Re: __constructor parameter limitations. | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-55487@lists.php.net to get a copy of this message | ||
Am 17.09.2011 20:08, schrieb Stas Malyshev:
> Hi!
>
>> On Sat, Sep 17, 2011 at 17:08, Laruence<laruence@php.net> wrote:
>>>> class A { public function init($a, $b) { } }
>>>> class B extends A { public function init($a) { } }
>>>>
>>>> => PHP Strict Standards: Declaration of B::init() should be compatible
>>> with
>>>> that of A::init()
>>> do you know any reason for this?
>>>
>>
>> The reason for this is simply that B must act like A since every B object is
>> also an object of A.
>
> This is not a real reason, it's just repeating it. All B is saying in fact "I'm
> going to ignore everything but the
> first parameter", and there's no real reason not to allow it to do that. There's
> no "act" that makes B incompatible
> with A here, this warning is completely useless
in this case i agree
practical sample:
class a
{
public function whatever($param, $no_cache=0)
{
}
}
class b extends a
{
public function whatever($param)
{
}
}
think about $no_cache is a new param of a library class with a default value
currently you have to "fix" all classes which are extend this class everywhere
as long you are using E_STRICT which we are using on all production machines
in combination with display_errors off and a global error-log for all hosts
to make sure we are dealing with really clean code
the same if b has an additonal parameter
as long a has lesser params this is technical OK and compatible
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc