PHP |类内更改函数

PHP |类内更改函数,php,function,class,parameters,Php,Function,Class,Parameters,我想用PHP创建一个守护进程构造函数。 class DAEMON { var host; var port; function __construct($host, $port) { $this -> host = $host; $this -> port = $port; } function start() { while (true) { $this->loop

我想用PHP创建一个守护进程构造函数。

class DAEMON {
    var host;
    var port;
    function __construct($host, $port) {
        $this -> host = $host;
        $this -> port = $port;
    }
    function start() {
        while (true) {
            $this->loop();
        }
    }
    function loop() {

    }
}
除了传递$host和$port参数,如

$server = new DAEMON("127.0.0.1", 9000);
$server -> start();
我想以某种方式将loop()函数作为第三个参数传递,因此它会覆盖loop()函数或在其中插入代码。

class DAEMON {
    var host;
    var port;
    function __construct($host, $port) {
        $this -> host = $host;
        $this -> port = $port;
    }
    function start() {
        while (true) {
            $this->loop();
        }
    }
    function loop() {

    }
}
我已经试过了

$server = new DAEMON("127.0.0.1", 9000, function() {
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();
$server = new DAEMON("127.0.0.1", 9000);
$server::loop = function() {
    //not working, it's not javascript
};
$server->start();

$server = new DAEMON("127.0.0.1", 9000, function() {
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();
$server = new DAEMON("127.0.0.1", 9000);
$server::loop = function() {
    //not working, it's not javascript
};
$server->start();
两者都不起作用。我怎么做?我花了好几个小时试图找到一个解决方案。

您可以调用语言构造将参数传递给匿名函数。在您的情况下,如果您想使用
$server
变量,那么您可以这样做

$server = new DAEMON("127.0.0.1", 9000, function() use ($server){
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();
。。。但要使其工作,您的
守护进程{}
类在接受类型的构造函数中应该有第三个参数

可以调用语言构造将参数传递给匿名函数。在您的情况下,如果您想使用
$server
变量,那么您可以这样做

$server = new DAEMON("127.0.0.1", 9000, function() use ($server){
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();
。。。但要使其工作,您的
守护进程{}
类在接受类型的构造函数中应该有第三个参数

可以调用语言构造将参数传递给匿名函数。在您的情况下,如果您想使用
$server
变量,那么您可以这样做

$server = new DAEMON("127.0.0.1", 9000, function() use ($server){
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();
。。。但要使其工作,您的
守护进程{}
类在接受类型的构造函数中应该有第三个参数

可以调用语言构造将参数传递给匿名函数。在您的情况下,如果您想使用
$server
变量,那么您可以这样做

$server = new DAEMON("127.0.0.1", 9000, function() use ($server){
    // function() can't take any parameters
    // I cant use $server variable here
});
$server -> start();

。。。但要使其工作,您的
守护进程{}
类在接受类型的构造函数中应该有第三个参数

我不确定您允许函数运行任意代码的实际原因,但您可以通过执行


我不确定您允许函数运行任意代码的实际原因,但您可以通过执行


我不确定您允许函数运行任意代码的实际原因,但您可以通过执行


我不确定您允许函数运行任意代码的实际原因,但您可以通过执行


只需将匿名函数传递给构造函数即可


您只需将匿名函数传递给构造函数即可


您只需将匿名函数传递给构造函数即可


您只需将匿名函数传递给构造函数即可


$server=newdemon(“127.0.0.1”,1337,function()使用($server){echo$server->host;});尝试获取非对象$server=new DEMON的属性时抛出错误(“127.0.0.1”,1337,function()use($server){echo$server->host;});尝试获取非对象$server=new DEMON的属性时抛出错误(“127.0.0.1”,1337,function()use($server){echo$server->host;});尝试获取非对象$server=new DEMON的属性时抛出错误(“127.0.0.1”,1337,function()use($server){echo$server->host;});尝试获取非object属性时抛出错误这基本上就是我正在编写/测试的内容。不过我要补充的一点是,您将无法访问回调中的
$host
$server
上的其他私有属性。您必须将它们公开,添加一个getter方法或将它们作为单独的参数传入。不,如果需要,您也可以简单地将主机和端口传递给回调函数。这是我建议的选项之一,“将它们作为单独的参数传入”。这基本上就是我编写/测试的内容。不过我要补充的一点是,您将无法访问回调中的
$host
$server
上的其他私有属性。您必须将它们公开,添加一个getter方法或将它们作为单独的参数传入。不,如果需要,您也可以简单地将主机和端口传递给回调函数。这是我建议的选项之一,“将它们作为单独的参数传入”。这基本上就是我编写/测试的内容。不过我要补充的一点是,您将无法访问回调中的
$host
$server
上的其他私有属性。您必须将它们公开,添加一个getter方法或将它们作为单独的参数传入。不,如果需要,您也可以简单地将主机和端口传递给回调函数。这是我建议的选项之一,“将它们作为单独的参数传入”。这基本上就是我编写/测试的内容。不过我要补充的一点是,您将无法访问回调中的
$host
$server
上的其他私有属性。你必须将它们公开,添加一个getter方法或将它们作为单独的参数传入。不,如果需要,你也可以简单地将主机和端口传递给回调函数,这是我建议的选项之一,“将它们作为单独的参数传入”。