Accessing outside variable using anonymous function as params

You have to use use as described in docs:

Closures may also inherit variables from the parent scope. Any such
variables must be declared in the function header. Inheriting
variables from the parent scope is not the same as using global
variables. Global variables exist in the global scope, which is the
same no matter what function is executing.

Code:

$result="";
fetch("SELECT title FROM tbl", function($r) use (&$result) {
   $result .= $r['title'];
});

But beware (taken from one of comments in previous link):

use() parameters are early binding – they use the variable’s value at
the point where the lambda function is declared, rather than the point
where the lambda function is called (late binding).

Leave a Comment