Re: Binding object instances to static closures

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm talking about PHP 5.4. `bindTo` is a Closure method in PHP 5.4, and
allows you to set the `$this` variable inside of a Closure. However,
apparently you can't use it on Closures created inside static methods.

I knew that you could create another function which would return the
Closure, however, that isn't what I asked. I wanted to either use the
`bindTo` method on a static Closure, or create a non-static Closure in a
static method.


On 31 May 2013 19:25, David Harkness <david.h@xxxxxxxxxxxxxxxxx> wrote:

> On Fri, May 31, 2013 at 10:54 AM, Nathaniel Higgins <nat@xxxxxxx> wrote:
>
>> Is it possible to bind an instance to a static closure, or to create a
>> non-static closure inside of a static class method?
>>
>
> PHP doesn't have a method to do this. In JavaScript you can use jQuery's
>
>     var func = $.proxy(function () { ... }, object);
>
> In fact, you cannot use $this inside a closure at all (unless 5.4 has
> added a way that I haven't seen yet). You can get around that by declaring
> a local variable to hold a reference to the instance to use with "use". It
> looks strange here because you're also passing in $testInstance for the
> comparison.
>
>     <?php
>     class TestClass {
>         public static function testMethod() {
>             $testInstance = new TestClass();
>             $closure = $testInstance->createClosure($testInstance);
>
>             call_user_func($closure);
>             // should be true
>         }
>
>         private function createClosure($testInstance) {
>             $self = $this;
>             return function() use ($self, $testInstance) {
>                 return $self === $testInstance;
>             }
>         }
>     }
>
>     TestClass::testMethod();
>
> Peace,
> David
>
>


-- 
Thanks,
http://nath.is
@NatIsGleek <http://twitter.com/natisgleek>
-- --
Unless otherwise specified, this conversation can be classed as
confidential, and you have no permission to share all, part, or even the
gist of this conversation with anyone not part of the original
conversation. If in doubt, please contact be with the above links, or on my
UK phone number - *07427558947*. Please be thoughtful of what time it is in
the UK at your time of calling.

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux