Hello, See the reply inline:
On Mon, Feb 25, 2013 at 3:43 PM, Nils Andre <nilsan...@gmail.com> wrote: > Hi Everyone on the list, I have no RFC Karma here so far, so I post this to > the list at first. There has been ongoing discussion about new APIs and so > fort, so this is a suggestion for language cleanup by Autoboxing. I'd > really appreciate comments. Follow the steps described here in order to get RFC karma and everything should be fine: https://wiki.php.net/rfc/howto :) > == Introduction == > This RFC tries to approach the need for Autoboxing in PHP, or, to make > primitive types behave as if they were objects when being used or accessed > in an objectional fashion. Autoboxing can be discussed from various > perspectives, which is far beyond the scope of this document, which much > more addresses the fact that the language of PHP must be cleaned up in > order to grow more in terms of maturity and hence, in user accpetance. > > == Autoboxing in brief == > Autoboxing is that we can use primitive types, like integers, strings, > booleans and array as if they were objects, but without being constructed > as objects themselves. I'm not very comfortable with the autoboxing of --everything--. Could you please detail why autoboxing anything that's not array or string would be useful? I like the idea of autoboxing for strings / arrays, where the most problems related to parameters order would be solved but for the other types, as a developer I can't see it. > > Autoboxing is widely discussed, and somehow a must-have in OOP as a > consequence to having primitive types (for the sake of performance and > memory overhead) but keeping the language OOP-consistent. > > == Why PHP needs it == > PHP needs autoboxing as a means to restructure the language and make it > more predictable. One big flaw of today's PHP is, that it is unstructured > and chaotic with its builtin functions, as, for example, those dealing with > strings. Not going too much into details here, many programmes always have > to look up the function definition because very similar functions have > their parameters in different orders or simply don't act in a predictive, > well-structured manner. This article is a good read to sum it up: > > http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/ > > The problem derives from the fact that PHP has not been designed top-down, > but has been developed the bottom-up way over many years: As of today, the > language offers features other languages don't have, but struggles with > it's buried bodies from the past (mainly because compatibility had and > still has to be kept.) > > By _adding autoboxing_ for all primitive types (Booleans, Strings, > Integers, Arrays), we would clean up the language in a very consistent > manner, but still retain backwards compatibility. > > == How it could be implemented == > We would not need much programming, because we simply map the new autoboxed > notation to the old code. We suggest the new notation to reproduce the Java > notation and parameter sequence closely, because it is pretty > straightforward and consistent (see, for example, the Javadocs on > java.lang.String). > > == Syntax == > The mapping is very straigtforward. Consider this: > > $a = "This is a string"; > > $b = $a->toUpperCase() --> $b = ucase($a) > $b = $a->substring(0,4) --> $b = substr($a, 0, 4) > > It would also allow many brilliant constructs like the following > > if ($b->startsWith("This")) { ... } > > in contrast to > > if (substr($b,0,4) == "This") { ... } > > Notice that the latter is error-prone, because if the condition changes one > would always have to match the string on the right handside to the length > of it on the left. This should be done in a transparent manner imho. The current substr function should be mapped to String::substr() as well. I'd recommend you play a bit with this: https://github.com/nikic/scalar_objects and come up with some examples on how the classes would look like before going forward with this proposal. > == Compatibility == > The old notation could be switched on/off at any time. > > The old notation would be switched on by default until, say, PHP 6, and can > then be enabled/disabled by either a compile flag, INI setting or some "use > \PHP5\*;" or something on top of a PHP file, which then makes the old > notation available to any code that follows/any file that is included > afterwards. As a consequence, \PHP5 will be the namespace comprising all > "old"/compatibility stuff. IIRC disabling functionality via ini settings isn't a desired thing. As for namespaces I think it's a bad idea. Currently everything in PHP is global, not namespace and this introduces a new layer for programmers to learn of. > == Advantages == > - Cleanup of the language > - Consistency and predictability improved a lot (also in constrast to > possible userland classes - which would then all be slightly different) > - No lacking backwards compatibility > - Easier learning for new PHP programmers (beginners to PHP would be much > more pointed to learning OOP than procedural programming) > - Easier switching for programmers from Java to using PHP and vice versa > (now that PHP grew very mature, attract the Java folks with the cool stuff > PHP offers) > - Little overhead (as far as I am aware) to implement > - Nicer language syntax (see References) > > == Disadvantages == > - I don't know how complicated it is to implement. So far we don't have any > extensions for this on PECL, except for strong typing (see reference). From > a theoretical point of view, it is just mapping. > - There might be heaps of ways to implement, as the other autoboxing RFC > offers one possiblity. Certainly we need discussion on the best way to > implement. Maybe also "autoboxing" is the wrong word, as this RFC simply > suggests to map primitive types to some objectual syntax. > > == References == > This RFC [[https://wiki.php.net/rfc/autoboxing]] views it from the angle of > nicer syntax. > > [[ > http://php.webtutor.pl/en/2011/04/13/strong-data-typing-in-php-part-ii-autoboxing-and-indestructable-objects-english-version/]] > implements a sort of userland "autoboxing" in PHP. > > [[http://www.php.net/manual/en/intro.spl-types.php]] is the documentation > of PECL SPL_Types, which make strongly-typed classes for primitive types > available. While they implement strong typing (if wanted), they do not > offer syntax cleanup. Currently I'm playing around with a demo implementation of this feature but it's private at the moment, still in early stages. I'd be happy to work on and provide a patch for this later on. Currently all the RFCs should be targeted for PHP-next (5.6) so there's no rush for this imho. Have a nice day ---- Florin Patan https://github.com/dlsniper -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php