Hi everyone,

On 28/07/2014 09:46, Michael Wallner wrote:
>>> https://bugs.php.net/patch-display.php?bug=67064&patch=bug67064-BC&revision=1402667581
> +1 on Matteo's patch. Rather a single fix than a couple.
> IIRC, we also have to think about the count_elements handler.

I committed my patch locally and I was looking into the count_elements
inconsistency, hoping to push both fixes later today. While doing that I
had an epiphany which led me to think that we have a much bigger problem
to solve.

As it is now, the interface definition looks like:

interface Countable {
  public function count();

Yes, it might (or will, if we don't apply my patch) be called as
count($mode = COUNT_NORMAL), but the definition on the manual
(http://php.net/manual/en/countable.count.php) is wrong and can only be
considered a hint.

To me this is quite a major gotcha. On the other hand we can't alter the
method signature, otherwise the userland code implementing Countable
will start triggering fatal errors:

Declaration of SomeClass::count() must be compatible with
Countable::count($mode = COUNT_NORMAL)

Which is something we could do for .NEXT maybe, but certainly not in 5.6RC3.

My suggestion would be to revert the changes and start an RFC process to
properly fix the issue, if that's what we want.

We could even add a new "CountableRecursive" interface that implements
"Countable" and provides count($mode = COUNT_NORMAL) if we don't want to
take the BC hit, but then again it's not 5.6RC3 material to me.

Matteo Beccati

Development & Consulting - http://www.beccati.com/

PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to