After a coffee break, I think this is how the language could do this in a semantically pleasing way.
interface iArrayA ['a' => string ] interface iArrayB extends iArrayA ['b' => string ] $arr is iArrayA &| iArrayB Best, Richard Miles > On Jun 26, 2024, at 11:57 AM, Richard Miles <richard@miles.systems> wrote: > > “Array-application will also be pushed to future-scope” > > > Dang, this is what I was looking forward to the most. Helping set some > precedent on this issue, and this is a solid start. I’ve been thinking about > what it would look like for strictly typed arrays in PHP for a while now. I > think a custom implantation like SqlObjectStorage or SplFixedArray could help > performance since we now have a fixed list and no need for a hash table, and > it may solve some complexity in implementation. This is slightly off-topic, > but if anyone is interested in working on a typed arrays initiative, please > contact me directly. > > > That said, I agree with Robert Landers, who wrote the following: > > There's no need to use `?` to check for existence on a key, so this: > > $arr is ['a' => string, ?'b' => string, ...]; > > should be this: > > $arr is ['a' => string, 'b' => ?string, …]; > > ______ > > Chuck Adams cleared that up with: > The first means b is an optional key, but if it’s there, can only be a > string. The second says b is a required key, but it may be a string or null. > If there were a binding involved, that determines the type of the binding in > incompatible ways. > ______ > > I think there is a need to ensure a key does not exist even if we’re not > happy about this syntax, but if not having `$arr is ['a' => string, 'b' => > ?string, …]` would still make me very happy. > > Best, > > Richard Miles > > >> On Jun 24, 2024, at 5:31 PM, Larry Garfield <la...@garfieldtech.com> wrote: >> >> On Thu, Jun 20, 2024, at 5:38 PM, Larry Garfield wrote: >> >>> To that end, we're looking for *very high level* feedback on this RFC: >>> >>> https://wiki.php.net/rfc/pattern-matching >> >> Hi folks. Thank you to those who have offered feedback so far. Based on >> the discussion, here's what we're thinking of doing (still subject to >> change, of course): >> >> * We're going to move `as` to future-scope. There's enough weirdness around >> it that is independent of pattern matching itself that it will likely >> require its own discussion and RFC, and may or may not involve full pattern >> support. >> >> * Similarly, we're going to hold off on the weak-mode flag. It sounds like >> the language needs to do more to fix the definition of "weak mode" before >> it's really viable. :-( On the plus side, if the type system itself ever >> adds support for a "coercion permitted" flag, patterns should inherit that >> naturally, I think. >> >> * Array-application will also be pushed to future-scope. Again, there's >> enough type-system tie in here that is tangential to patterns that we'll >> pick that fight later. >> >> * Ilija and I have discussed regex patterns a bit further, and it sounds >> like they’re going to be rather complicated to implement. Even assuming we >> agree on the syntax for it, it would be a substantial amount of code to >> support. (It’s not like types or literals or range where we can just drop >> something pre-existing into a new function.) So we’re going to hold off on >> this one for now, though it does seem like a high-priority follow-up for the >> future. (Which doesn’t have to be us!) >> >> So let's not discuss the above items further at this point. >> >> * I'm going to do some additional research into other languages to see how >> they handle binding vs using variables from scope, and what syntax markers >> they use and where. Once we have a better sense of what is out there and is >> known to work, we can make a more informed plan for what we should do in >> PHP. (Whether using a variable from scope in the pattern is part of the >> initial RFC is still an open question, but we do need to design it alongside >> the capture part to ensure they don't conflict.) Stay tuned on this front. >> >> * We've removed the dedicated wildcard pattern, as it's equivalent to >> `mixed`. If there's interest, we're open to having a secondary vote to >> bring it back as a short-hand pattern. It's trivial to implement and we >> don't have strong feelings either way. >> >> * There's not been much discussion of range patterns. Anyone want to weigh >> in on those? >> >> * The placement of `is` on `match()` is still an open question. >> >> * No one has really weighed in on nested patterns for captured variables. >> Any thoughts there? >> >> * I’ve seen a suggestion for capturing the “rest” of an array when using … >> That’s an interesting idea, and we’ll explore it, though it looks like it >> may have some interesting implications that push it to future scope. It >> feels like a nice-to-have. >> >> Thanks all. >> >> --Larry Garfield >