Supporting strings 'by default' in is_a() has the downside that it produces slightly unpredictable results. If you are accepting 'mixed' arguments, some of which may be strings, there is a slim chance that the string you accept will match the class or it's parent by accident.

Personally if I did not believe that the barrier for a BC change has to be alot higher than 'prettier or consistent API', i would have suggested that is_subclass_of should be changed to be 'consistent', and safer.

While the old justification for using is_a() over instanceof, has almost gone (it was the only way to write code that was portable to PHP4 & PHP5.*, except for the annoying depreciation message). I still consider is_a(), especially with negative testing slightly clearer to read than instanceof.

Regards
Alan

On Monday, October 17, 2011 09:22 PM, Jonathan Bond-Caron wrote:
On Sun Oct 16 06:59 PM, Stas Malyshev wrote:
It definitely makes PHP worse by propagating inconsistent APIs.
I created a patch against 5.4:
https://bugs.php.net/patch-display.php?bug_id=55475&patch=is_a_5.4_alternati
ve&revision=latest

The patch changes the behavior to:
is_a("ab", "b") // false
is_a("ab", "b", true) // autoload "ab", autoload "b" -- false

is_subclass_of("ab", "b") // false
is_subclass_of("ab", "b", true) // autoload "ab", autoload "b" -- false

Both class names can be "autoloaded" but not by default

Thoughts?





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

Reply via email to