Re: 5.4 beta
| From: | Ferenc Kovacs | Date: | Fri, 07 Oct 2011 19:32:24 +0000 |
| Subject: | Re: 5.4 beta | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-55739@lists.php.net to get a copy of this message | ||
'
On Fri, Oct 7, 2011 at 8:58 PM, Gustavo Lopes <glopes@nebm.ist.utl.pt> wrote:
> On Fri, 07 Oct 2011 18:31:42 +0100, Ferenc Kovacs <tyra3l@gmail.com> wrote:
>
>> do we have a wiki/documentation about what exactly ended up in 5.4
>> from the Closure improvements? (Rebind)
>>
>>
>> https://wiki.php.net/rfc/closures/object-extension#privateprotected_members_scope
>> is really hard to read, as it contains all of the suggested ideas and
>> possible solutions, etc.
>> if not, maybe someone with the required knowledge could start working
>> on adding the documentation?
>>
>
> I don't think so, but if I had to summarize the innovations in 5.4, this
> would be it:
>
> - Closures can now have an associated scope
> - Closures can now have a bound object
> - Closures can now be either static or non-static
>
> - Closures defined in a place with an active scope are scoped accordingly
> - Closures defined inside an instance method (or bound closure) have a bound
> object (namely $this)
> - Closures are static if defined within a static method or with the static
> keyword (static function() { ... })
>
> static => !bound
> (but it's false that !static => bound)
> bound => scoped
> !static && scoped => bound
> (i.e., if !static, scoped <=> bound)
>
> The bound instance and the scoped can be freely changed with Closure::bind
> and $closure->bindTo, subject to these constraints.
"- Closures can now have an associated scope"
as it is https://wiki.php.net/rfc/closures/object-extension#privateprotected_members_scope
?
at first I thought that scope means Variable scope, but I think I get
it now: it means that when the Closure calls/access something through
$this, it will be handled as it was called/accessed from the given
class(scope).
and this also explains why we had to add the third param for Closure::bind.
the bound param defines what is the $this pointing to, and the scope
means that from what scope would be used for accessing the $this.
having a static Closure means that it won't have the $this, but it can
still have a scope (so it can interact with other static methods).
thanks, I think I managed to wrap my head around that!
--
Ferenc Kovács
@Tyr43l - http://tyrael.hu