I am facing an unexpected behaviour trying to use the following:
$object instanceof $class
1/ PHP 'instanceof' keyword and namespaces work well together, as explained in the official doc.
2/ Sometimes, however, backslash escaping gives in to more subtle (obscure?) behaviour, as Ben kindly explained in this nice post.
Somewhere deep down in my code, y set a couple of dumps as follow:
var_dump($object, $class);
var_dump($object instanceof $class);
which gives me the following output when running my script:
class Tools\Tests\Entity\testObject#226 (2) {
private $var_one =>
NULL
private $var_two =>
NULL
}
string(36) "Tools\Tests\Entity\testObject"
bool(false)
The class of my first dump is strictly the same as the string in my second dump. However, my instanceof dump returns FALSE. Why ?
I played around with backslashes, with no luck. Maybe I messed up somewhere with namespaces ? The thing is I really don't know how to troubleshoot further down. What should I try ?
You can test for instances using namespaces, but use the fully qualified class name.
For your test I would do this:
$class = "\\Tools\\Tests\\Entity\\testObject";
$object = new $class;
var_dump($object instanceof $class); //bool(true)
You can also test this way using single quotes and not worry about escaping your backslashes and save yourself a few keystrokes.
$class = '\Tools\Tests\Entity\testObject';
$object = new $class;
var_dump($object instanceof $class); //bool(true)
I use simpler variant
var_dump($object instanceof \Tools\Tests\Entity\testClass);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With