Три способа:
$db = new PDO('...');
// 1. use - захват из внешней области видимости
$query = function(string $sql) use ($db) {
return $db->query($sql);
};
// 2. Аргумент функции
$query = function(PDO $db, string $sql) {
return $db->query($sql);
};
// 3. Стрелочная функция (авто-захват)
$query = fn(string $sql) => $db->query($sql);
// 4. Closure::bind - привязка к объекту
$fn = Closure::bind(function() {
return $this->privateField;
}, $obj, get_class($obj));