On Sunday, February 17, 2019 9:24:05 AM CST Girgias wrote:
> Greetings internals,
> 
> I would like to have your opinion on being able to type hint arrays and
> objects which implement
> array-like interfaces (notably ArrayAccess, Countable, and Iterator) as
> currently if a function /method only needs one specific feature of an array
> and is willing to accept array-like objects.
> There are some rather repetitive boilerplate and the impossibility of using
> type hints.
> 
> An example of such a function, (where $arrayLike could be custom session
> object) :
> 
> /** ArrayAccess|array $arrayLike */
> public function checkCSRF($session) {
>    if (!is_array($session) && !($session instanceof ArrayAccess)) {
>        throw new Exception();
>    }
>    // Check token
>    if (!isset($session['CSRF']) {
>        throw new Exception();
>    }
>    // Do some more stuff ...
> }
> 
> As it can be seen this function/method doesn't need any of the other
> properties of an array
> such as Countability or Traversability to do its job.
> However, in the current state of PHP, it is impossible to accept array-like
> objects without
> writing the initial if statement.


While I would like to see better consistency between arrays and array-ish 
objects in principle, in this case I think it's the wrong approach.  You're 
using an associative array as a cheap anonymous struct.  Don't do that.  It's 
far less self-documenting, far less type safe, far more error prone, and far 
less performant.  Just switching $session from an array-ish value to a class 
with public properties would make it use half as much memory.  cf:

https://steemit.com/php/@crell/php-use-associative-arrays-basically-never
https://steemit.com/php/@crell/php-never-type-hint-on-arrays

Making it easier to use anonymous-array-or-object-acting-like-anonymous-array 
would be a step backwards in every possible way.

--Larry Garfield

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to