On Wed, Jan 13, 2021 at 10:08 AM Rowan Tommins <[email protected]> wrote:
> On 12/01/2021 16:51, Marco Pivetta wrote: > > Whether the problem can be mitigated is what should be discussed, but the > > problem is objectively there. > > > Hi all, > > Like others, I like the *idea* of object keys, but worry about its > practical impact. > > A few scatter-gun thoughts on possible approaches, I don't think any of > them is the solution, but maybe they'll spark someone else to further > ideas: > > > - Only allow objects that are "stringable" (i.e. implement __toString), > but don't actually call it. This retains the safety of code using > "(string)$key", but not code passing to a constraint of "string|int". > (It also means enums will all have to have an __toString, which might be > a price worth paying.) > > - Create a new type, which is like an array but allows object keys, with > its own literal syntax. e.g. > > $hash = hash['foo' => 42, $someObject => 69]; > assert(is_array($hash) === false); > assert(is_iterable($hash) === true); > > - Invent a syntax for initialising a custom collection object from a > literal with arbitrary keys and values, but not actually initialise it > as an array. Even without generics, this would make it much more > attractive to replace more arrays with specific collection types. > I don't think a separate dictionary type would really help (in the context of this discussion). If you're working with arrays, you already either treat it as a vector (in which case the keys are irrelevant) or as a dictionary (in which case you would need to deal with object keys regardless of whether you call it "array" or "dict"). I think a dedicated dictionary type can have other benefits (primarily removing numeric string -> int canonicalization), but I don't think that distinguishing allowed key types based on it is a good idea. (If we introduced such a type, I would expect it to have the same key requirements as normal arrays, because both types would have to be strongly interoperable, and allow mostly seamless conversions.) Regards, Nikita
