Проблема с закрытием PHP

По-видимому, $ pid находится вне сферы действия здесь. Разве это не должно быть «закрыто» функцией? Я довольно уверен, что, например, закрытие работает в javascript.

Согласно некоторым статьям, закрытие php нарушено , поэтому я не могу получить к нему доступ?

Итак, как можно получить доступ к $ pid из этой функции закрытия?

class MyClass { static function getHdvdsCol($pid) { $col = new PointColumn(); $col->key = $pid; $col->parser = function($row) { print $pid; // Undefined variable: pid }; return $col; } } $func = MyClass::getHdvdsCol(45); call_user_func($func, $row); 

Редактирование. Я обошел его с помощью: $col->parser = function($row) use($pid) . Однако я чувствую, что это уродливо.

    Вам нужно указать, какие переменные должны быть закрыты таким образом:

     function($row) use ($pid) { ... } 

    Вы можете использовать метод bindTo.

     class MyClass { static function getHdvdsCol($pid) { $col = new PointColumn(); $col->key = $pid; $parser = function($row) { print $this->key; }; $col->parser = $parser->bindTo($parser, $parser); return $col; } } $func = MyClass::getHdvdsCol(45); call_user_func($func, $row); 

    Я думаю, что PHP очень согласован в области определения переменных. Правило: если переменная определена вне функции, вы должны указать ее явно. Для лексической области используется «использование», поскольку глобальные глобальные значения используются.

    Например, вы также не можете использовать глобальную переменную напрямую:

     $n = 5; function f() { echo $n; // Undefined variable } 

    Вы должны использовать глобальное ключевое слово:

     $n = 5; function f() { global $n; echo $n; }