Em Mon, 30 Jul 2012 21:11:58 +0200, Todd Ruth <tr...@proposaltech.com> escreveu:

On Mon, 2012-07-30 at 19:31 +0200, Gustavo Lopes wrote:
https://wiki.php.net/rfc/incompat_ctx

An RFC for deprecating and removing $this from incompatible context.

Comments are welcome.


I'm just a user, but I'd like to beg that the feature not be
removed, at least not without having an ini setting for at least
a couple of years.  As the RFC states, "This feature can, however,
be used  to implement trait-like behavior, and I'm sure someone
somewhere did such a thing."  I know in our company's code, such
uses were frequent.  I believe they are still common.  Refactoring
often doesn't fit the schedule.  I doubt we're unusual in allowing
classes to do more than they should instead of separating code
off into a trait or making other high level changes.  Note that
traits have only been available since March 1, 2012 (php 5.4.0).

I don't doubt that you're not 'unusual in allowing classes to do more than they should instead of separating code off into a trait or making other high level changes'. I DO doubt, however, that this particular form of class bloating is usual or "not unusual". However, it will be impossible to collect reliable data on this.

I don't think axing register globals is very relevant.  Perhaps after
traits have been available for several years the comparison would
be better.  With register globals, a good alternative (the $_
variables) have been around for many years.  With traits, a good
alternative has been around for a few months.  I think the point
of mentioning register globals is just to say "We've made huge
BC breaks before."  That doesn't make it less painful.

1. I don't think how long traits have been around particularly relevant here. The relevant question, IMO, is whether an alternative exists. And if you're upgrading to a version where call-with-incompatible-context does not exist, traits will definitely be an option. At most, it's a point for the minority of code that must run in multiple versions, but

2. I don't even agree with the premise. By the time this is removed, traits will have been around for quite some time. Plus,

3. There are other low-cost alternatives, namely the obvious one: pass the object via an extra parameter instead of operating on $this directly and unconditionally. This is really easy to do.

4. Maybe register_globals was not the best example, as you have very easy workarounds. But consider the removal of call-time pass by reference (deprecated in 5.3 -- if I'm not mistaken -- and removed in 5.4). It's a change that does require significant refactoring (not to mention the awkwardness of having to use call_user_func_array() to pass by reference to __call methods), and it had certainly a much wider use than this.

--
Gustavo Lopes

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

Reply via email to