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