Until now I tried to find the easiest possible solution. Currently we have two paths to chose:
1- A class that implements ArrayAccess must be useable everywhere an "array" is useable; 2- ArrayAccess needs to be expanded with methods for all the array functions and ArrayObject needs to implement them; I was choosing the approach 1 since it was easier and with less impact on source. Since you want something better designed, we'll have to go on 2nd option. Please notice I do not want to override our current implementation of arrays in PHP, but it will bring 2 main advantages: A- It does not require hacking PHP array functions B- It gives you an OO interface The idea then was to keep it as an alternative, not a replacement. What's the scope them, you may ask me. Here it is: http://www.php.net/manual/en/book.array.php If this implementation covers these functions, I'll be nice. How would it be achieved? $coll->sort(); instead of sort($coll); $coll2 = $coll->reverse(); instead of $coll2 = array_reverse($coll); Is this better now? Cheers, 2009/7/30 Johannes Schlüter <johan...@schlueters.de>: > On Thu, 2009-07-30 at 11:42 -0300, Guilherme Blanco wrote: >> I'm trying to avoid a "globally solution" on first instance to avoid a >> great impact on language. >> If you wanna ask me what's the global solution, I'll suggest a >> Collection like implementation for all array functions. > > Define "all array functions" - What you're ending up with is that one > has to always look up whether a given function takes an Object of some > kind or not. > > I'd rather have a "yes, unless there's something good reason not to" > >> This would lead to a simpler implementation. So, here are the answers >> of your questions: > > As said I didn't mean them as actual questions, but pointers to possible > problems in regards to a clean design. > >> > - is that specific to ArrayObject or do we "need" interfaces like >> > "Sortable" or "Shuffable" >> >> All Interfaces that can be treated as normal arrays (implements >> ArrayObject) should be supported. > > ArrayObject is no Interface but a concrete class that means everybody > extending from there creates a is-a relationship which might be quite > limiting. > >> Why not ArrayAccess on first stage? I do not consider it right now >> because it'll require the method getArrayCopy() to be moved from >> ArrayObject to ArrayAccess. >> >> > - What should stuff like array_merge(ArrayObject, array) do >> >> It should return an array, just like the current function prototype defines > > That was a simple case, agreed, but thee might be cases where it's > probably not that clear what type should be used so again this should be > seen globally t come up with a as consistent solution as possible. > >> > - Should we do this globally? (should ldap_set_option() allow an >> > ArrayObject as 3rd param?) >> >> This can be obviously be considered... but at the first step, let's be >> strict to the plan an only support array operations. > > Why isn't that an "array operation"? Where's the strict line? Any > function prefixed with array_? - Then sort() would be ignored. Anything > in ext/standard using arrays? Then don't forget str_replace and other > functions ... and that's not clear for users. So where's the strict > line? > >> Basically what would be the approach I'm looking for? >> For all array_* functions, inspect if given parameter is an array or >> an instance of ArrayObject. >> If instance of ArrayObject, call ArrayObject::getArrayCopy() and >> proceed normally with execution of each array_* function. It can't be >> that hard! =) > > By using getArrayCopy you are introducing quite possibly a huge > performance penalty for using ArrayObject ... creating a copy of the > HashTable just for throwing it away a moment later. > > Yes, such an implementation would be trivial but I don't think it's what > we'd want. > > johannes > > > -- Guilherme Blanco - Web Developer CBC - Certified Bindows Consultant Cell Phone: +55 (16) 9215-8480 MSN: guilhermebla...@hotmail.com URL: http://blog.bisna.com São Paulo - SP/Brazil -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php