Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局变量/对象(php)上的pcntl_信号_Php_Signals - Fatal编程技术网

全局变量/对象(php)上的pcntl_信号

全局变量/对象(php)上的pcntl_信号,php,signals,Php,Signals,我试图捕获一个信号(即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)并从一个对象调用一个函数

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


谢谢

它通过在类中添加处理程序来工作,如下所示:

class obj {
...
public function __construct() {
    ...
    pcntl_signal(SIGUSR1, function ($signal) { 
        echo "Caught SIGUSR1...\n";
        $this->debug();
    });
}
不确定这是否是最好的方法,但似乎有效