Thank you all for the engagement so far.

(Note: All scalar types and one compound type can be cast as true or false 
natively - of the scalar and compound types, callable and object are the only 
two with no, native false representation.)

> Have you tried not initializing invalid objects? This could help you. Also 
> that sounds more logical to me as I don't see any reasons to initialize 
> invalid objects if it's a matter of simple validation instead.


I've tried valid objects (multiple approaches) - and I’m using the term valid 
loosely because the instances are not, technically, invalid in the strictest 
sense. I’m using “valid” and “invalid” as method names in the implementation 
because I don’t have a better word to describe the concept; still looking. If 
you'd like to hear more, please let me know and I can detail out other 
approaches, which are pretty standard. 

I only used it as an example of what would be possible and trying to illustrate 
using a real world example of the problem-space.

With that said, the RFC isn’t meant to directly solve an implementation issue 
that can’t be solved any other way; it’s more syntax, style, and consistency 
(see note above). 

Similar to:

function x(?SomeType $arg): ?SomeOtherType

Instead of:

function x(SomeType|null $arg): SomeType|null

Both are the same thing under the hood.

In that same spirit, totally opt-in - not required to use or you can get there 
some other way - similar to Marco’s comment around __toString. 

For example, I actively avoid null and don’t use most null-related things 
available in PHP and tend to wrap objects, methods, and functions that might 
return null…but, if you’re into null, don’t let me stop you. :)

(I also tend to wrap objects, methods, and functions that return bool and some 
other type to put them in a context where I get one or the other, but not 
either-or - file_put_contents, for example…big fan of single return types.)

> The one situation in which I can think of where an object might legitimately 
> have a falsey bool casting is if it represents a single value


I see that, though I don’t necessarily agree.

To use similar language, the object could represent a single, complex concept 
(especially through composition) - not just a single value. 

A car without a blinker is still a car and usable for most things it was 
designed for - and there could be a fallback for the missing blinker; valid 
instance with a non-blocking deficiency: 
https://www.dmv.org/how-to-guides/hand-signals-guide.php

>>> P.S. I don't see it feasible to have objects that evaluate false in logical 
>>> expressions.


I’m interested in more detail on this. 

Feasible as in not possible to do easily? Not possible in general? Or, 
something else? 

> For better or for worse (IMHO, for worse), `SimpleXMLElement` instances 
> representing attributeless empty elements are already falsy, so yes, it is 
> absolutely feasible.

Interesting use case. Haven’t used SimpleXMLElement enough to comment.

Interested to hear more.

> This is absolutely terrifying.

Not sure if this is referring to the SimpleXMLElement reference or beyond it. :)

Cheers,
Josh

> On Nov 2, 2022, at 2:09 PM, Marco Pivetta <ocram...@gmail.com> wrote:
> 
> On Wed, 2 Nov 2022 at 18:51, Claude Pache <claude.pa...@gmail.com> wrote:
> 
>> 
>> 
>>> Le 2 nov. 2022 à 09:12, Michał Marcin Brzuchalski <
>> michal.brzuchal...@gmail.com> a écrit :
>>> 
>>> P.S. I don't see it feasible to have objects that evaluate false in
>>> logical expressions.
>> 
>> For better or for worse (IMHO, for worse), `SimpleXMLElement` instances
>> representing attributeless empty elements are already falsy, so yes, it is
>> absolutely feasible.
>> 
>> —Claude
> 
> 
> This is absolutely terrifying.
> 
> Marco Pivetta
> 
> https://twitter.com/Ocramius
> 
> https://ocramius.github.io/

Reply via email to