сигналы — pcntl_signal для глобальной переменной / объекта (php)

Я пытаюсь поймать сигнал (например, SIGUSR1) и вызвать функцию из объекта.

class obj {
...
public function debug() {
var_dump($this->varfoo);
}
}

$o = new obj();
declare(ticks = 1);
function sig_handler($signo) {
switch ($signo) {
case SIGUSR1:
echo "Caught SIGUSR1...\n";
$o->debug();
break;
default:
// handle all other signals
}
}
pcntl_signal(SIGUSR1, "sig_handler");

Как только я отправляю сигнал, я получаю php фатальную ошибку:
Вызов функции-члена debug ();

Итак, я попробовал что-то еще:

Вместо этого:

function sig_handler($signo) {
...
}

pcntl_signal(SIGUSR1, "sig_handler");

Я использовал это:

pcntl_signal(SIGUSR1, function ($signal, $o) {
echo gettype($o); //this prints null, I was hoping for object
echo "Caught SIGUSR1...\n";
$o->debug();
});

Я знаю, что это выглядит неправильно, но я не могу понять, как передать $ o в обработчике сигналов.

Спасибо

0

Решение

Это сработало, добавив обработчик внутри класса следующим образом:

class obj {
...
public function __construct() {
...
pcntl_signal(SIGUSR1, function ($signal) {
echo "Caught SIGUSR1...\n";
$this->debug();
});
}

Не уверен, что это лучший способ, но, похоже, работает.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]