On 2011.04.02. 13:38, Jacob Oettinger wrote:
On Mar 31, 2011, at 21:10 , Rasmus Lerdorf wrote:
On 03/31/2011 10:58 AM, Martin Scotta wrote:
I think it's time to stop thinking in terms of "functions" and move
forward to "abstractions"
$s1 = 'string';
$s1->contains($s2);
$s1->indexOf($s2) === strpos($s1, $s2);
Why can't the strings be exposed as pseudo-objects ? users can choose to
use them as a regular strings or by calling methods on it.
This is actually something I have been toying with a bit. Adding the
ability to call methods on both strings and arrays. I still don't like
the idea of making them real objects as the overhead and the amount of
code that would need to be changed in the core and in every extension is
daunting. Anybody out there have a patch along these lines?
Sounds interesting. A few thoughts:
The new "methods" could be implemented as functions that accept the string or
array as their first argument. Thereby allowing them to be called as functions too.
If the new methods are functions. Maybe they should be defined in the \string
and \array namespaces. This would allow a fresh start in naming string and
array functions, and allow addressing argument ordering issues. It would of
curse also open endless discussions on which functions to include and the
naming of these.
If the new string and array functions were defined in some namespaces. Would it be
possible to allow extending the string and array "classes" by defining more
functions in those namespaces in userland and/or extensions?
Should the new string functions be multibyte character set aware?
Should the above be generalized so that the -> operator can be used on any simple type,
and if the called "method" exists as a function in the types namespace, it should
be called. This would break the task into two parts. !) changing php to attempt calling
functions in a certain namespace for each simple type. 2) Writing extensions that create
functions for each type, string and/or array would be obvious starting points.
If I'm not mistaken you're talking about something like the Extension
Methods in C# ( http://msdn.microsoft.com/en-us/library/bb383977.aspx )
which, by the way, seems like a great idea.
The other thing that comes to mind is Scala's implicits (
http://www.codecommit.com/blog/ruby/implicit-conversions-more-powerful-than-dynamic-typing
) It solves the same problem, while being really powerful, because of
Scala's type system.
The problem of conflicting implicits (or whatever it'll be called) of
course should be left to the developer, much like aliasing for traits.
--
Pas
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php