Tuesday, 15 March 2011

php - Using $this when not in object context with ReflectionFunction->invoke() -



php - Using $this when not in object context with ReflectionFunction->invoke() -

class someclass { private $success = "success\n"; function getreflection() { homecoming new reflectionfunction(function() { print $this->success; }); } } $reflection = (new someclass)->getreflection(); $reflection->invoke();

when run this, a

fatal error: using $this when not in object context in command line code on line 5

what's happening here? why $this not defined there...?

as i'm in closure within method, $this should defined. , yes, i'm on newer version php 5.4.

how can prepare it?

reflectionfunction operating on unbound closures. that's why after reflectionfunction::invoke() call, there's no defined $this variable within closure , such fatal error appears.

but there's way around it.

reflectionfunction bids 3 necessary methods phone call $this binding:

reflectionfunctionabstract::getclosure() reflectionfunctionabstract::getclosurethis() reflectionfunctionabstract::getclosurescopeclass()

the reflectionfunctionabstract::getclosure() still unbound, can bind via closure::bind().

all closure::bind() needs closure, wished object bound , class scope.

then solution is:

call_user_func(\closure::bind( $reflection->getclosure(), $reflection->getclosurethis(), $reflection->getclosurescopeclass()->name));

i wanted post question only, had found solution myself before posting, adding answer. context issue: https://github.com/rdlowrey/auryn/pull/72

php reflection this fatal-error

No comments:

Post a Comment