On Tue, Dec 29, 2009 at 3:01 AM, Etienne Kneuss <col...@php.net> wrote:
> Hi,
>
> On Tue, Dec 29, 2009 at 1:27 AM, Clint Priest <cpri...@warpmail.net> wrote:
>> Etienne Kneuss wrote:
>>>
>>> On Tue, Dec 29, 2009 at 12:04 AM, Clint Priest <cpri...@warpmail.net>
>>> wrote:
>>>>
>>>> Unfortunately $x instanceOf ArrayAccess doesn't return true when $x is
>>>> indeed an array.
>>>
>>> Making is_array return true for objects implementing ArrayAccess is a
>>> bad idea, for two main reasons:
>>>
>>> 1) is_array is a type check, and we should still be able to
>>> distinguish real arrays from objects
>>
>> That's true of course, definitely would need to be able to distinguish.
>>
>>> 2) ArrayAccess does not guarantee that an object will behave like an
>>> array, (e.g. you won't be able to use sort() on an object implementing
>>> ArrayAccess.
>>
>> I wonder if this is something that users would be expecting, that any
>> function which took an array would also take an object that implements
>> certain interfaces (such as ArrayAccess and perhaps Countable).
>>
>>> If, in your case, you want to accept both arrays and ArrayAccess
>>> objects, I guess if (is_array($v) || $v instanceof ArrayAccess)  is a
>>> sufficiently good way to check.
>>>
>>
>> I'm finding myself implementing ArrayAccess more and more often because its
>> so transparent to the consumer.  The reason this came up is because I was
>> considering returning all arrays from a certain section of my shared code
>> library always be an array object so that things like
>> $tblArray->pluck('Value') could be done, rather than array_pluck() type
>> functionality.
>>
>> That got me to thinking about all of the is_array() calls I would need to
>> replace throughout the codebase.
>>
>> Would it be terribly difficult to make objects with ArrayAccess completely
>> interchangable anywhere an array element would be required by a function?
>
> Yes, definitely, it would be a quite big amount of work (basically
> rewriting every functions dealing with arrays), and the interface that
> ArrayAccess proposes isn't enough for most array tasks.

can we go other way round and allow to use array's in ArrayAccess
context? I'd love to use it as a type-hint.


-- 
Alexey Zakhlestin
http://www.milkfarmsoft.com/
Sent from Prague, Czech Republic

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to