> -----Original Message----> From: Niklas Keller [mailto:m...@kelunik.com]
> Sent: Sunday, December 10, 2017 1:05 PM
> To: Sara Golemon <poll...@php.net>
> Cc: Andreas Hennings <andr...@dqxtech.net>; PHP internals
> <internals@lists.php.net>
> Subject: Re: [PHP-DEV] instanceof survives non-object variables, but crashes 
> on
> non-object constants.
> 
> >
> > This.  There's nothing undefinable about "1 instanceof \stdClass", the
> > clear and obvious answer is: "No, it's not an instance of \stdClass,
> > it's an integer."  The runtime result of false makes sense, the
> > compile time error doesn't.  Let's relax the compile time error (fold
> > it into a const false if you truly must) and call it done.  There's no
> > need to be hostile to users just because the code *seems* silly.
> >
> 
> This code doesn't just *seem* silly. For everything but testing whether it 
> works
> it is totally useless.

Do you mean the static use case specifically or in general?  Because the 
runtime use case can definitely be useful, even if it's not everyone's cup of 
tea.

I think it boils down to whether we want to:
(a) Keep things as-is.
(b) Block the runtime use case and error out in case of non-objects.
(c) Change the compile-time evaluation to allow non-objects and return false.

I definitely don't think we should do (b), as I completely agree with Sara the 
answer to whether $x instanceof \stdClass when $x=1 is well defined, and is a 
clear 'no' with no need to error out.  It's also a perfectly reasonable 
behavior to rely on.
My vote goes to (c), because while (a) would prevent an admittedly silly piece 
of code (a hardcoded check on whether an obviously non-object is an object) 
from running, I think consistency is preferable, and I don't see how erroring 
out during compile time in this particular case buys us anything.  

Zeev

Reply via email to