Hey Paul,

The only thing we are attempting to do here is make is_subclass_of() more consistent when using class names (strings), something instanceof cannot handle.

Given the following:

interface A {}
class B implements A {}
class C extends B {}

// currently false, and correct as B is not a subclass of B
var_dump(is_subclass_of('B', 'B'));

// currently false, but SHOULD be true
var_dump(is_subclass_of('B', 'A'));

// true since C's parent class is B
var_dump(is_subclass_of('C', 'B'));

// currently true, but inconsistent with is_subclass_of('B', 'A')
// why should having a parent matter?
var_dump(is_subclass_of('C', 'A'));



Currently, this (pseudo-code) is the workaround in ZF2 we are finding ourselves go with:

function someFunc($class, $type) {
  return (array_key_exists(
    $type,
    (class_parents($class, true) + class_implements($class, true)
  ));
}

-ralph

On 6/29/11 3:20 PM, Paul Dragoonis wrote:
On Wed, Jun 29, 2011 at 8:49 PM, Ralph Schindler<ra...@smashlabs.com>  wrote:
Correct.

I was hasty in that example, the first was copied&  tested (and is reflected
in the test, as is that variation of what I wrote up.)

Either way, test and patch work in 5_3.

Doesn't this functionality confuse matters?

If this patch is added, is there now no difference between instanceof
and is_subclass_of(). If this is the case my question is then why do
we have two methods to do the same thing?

I thought instanceof was for parent classes + interfaces.. and
is_subclass_of() was just for parent classes.

Regards,
Paul Dragoonis.


Thanks,
-ralph

On 6/29/11 2:42 PM, David Zülke wrote:

On 29.06.2011, at 21:39, Ralph Schindler wrote:

  interface A {}
  class B implements A {}
  class C extends B {}
  var_dump(is_subclass_of('B', 'A')); // true

Typo there; that should be 'C', not 'B'.

David




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





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

Reply via email to