> > No, what Craig is proposing is a type hint that covers both the existing > Countable interface and primitives which are naturally countable. > > If the union types RFC had passed, you'd be able to say "array|Traversable > $foo"; a recent RFC lets you instead say "iterable $foo". The suggestion is > to add a keyword which similarly acts as "array|Countable $foo". > > Unfortunately, as others have pointed out, it can't be called just > "countable", because that's the name of the existing interface. The > principle seems sound though, assuming we don't want to go down the route > of treating arrays as implementing interfaces. >
I think it's better to implement method calls on primitives than introducing new type keywords for every edge-case now. Once we have methods on primitives (counting array here as primitive), arrays can just implement the Countable interface and we're fine using Countable (the interface). Methods on primitives have the additional advantage that we can clean up the API and have improved readability when chaining e.g. array methods like filter and map. Regards, Niklas