Hi all, I want to bring your attention to a behavior that was mostly overlooked:
1. it is not possible to use an intersection type with an argument that defaults to null 2. it is not possible to use an intersection type with a nullable property (nor to make it default to null) 3. it is not possible to use an intersection type with a nullable return type Actually, 2. was possible until it was "closed" in https://github.com/php/php-src/pull/7254 I reported these behavior and you might find some discussion about it in https://bugs.php.net/81268 Looking at the past discussion on this list ( https://externals.io/message/113712) and at the rfc itself ( https://wiki.php.net/rfc/pure-intersection-types), this was mostly overlooked. That's why I'm posting this message. So that we can have that missing discussion here. To me, we are going to need (userland "we") these capabilities. It's quite surprising to be "forced" to return something, or "forced" to pass a value, when all other types in PHP allow "null". I know about the null pattern, but it is quite uncommon in PHP, because "null" works just great usually. I feel like we "just" need to agree on a syntax to make this possible. It was first suggested in the related PR to use "?A&B" (see https://github.com/php/php-src/pull/6799#issuecomment-804761117) This was rejected by the author with the reasoning that (?A)&B could mean (?A)&B or ?(A&B) or even (?A)|B. I personally don't think this ambiguity exists: (?A)|B is strictly the same as A&B, thus ?A&B cannot also mean A&B, and I don't get how one could take ?A&B for (?A)|B. Another argument is that ?A&B might collide with a future syntax. But I fail to see how. For sure we create examples of such collisions, but they all look constructed to me. Shouldn't we allow ?A&B ? Intersection types look unfinished to me without compat with nullables. Cheers, Nicolas