PHP |类内更改函数
我想用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
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方法或将它们作为单独的参数传入。不,如果需要,你也可以简单地将主机和端口传递给回调函数,这是我建议的选项之一,“将它们作为单独的参数传入”。