首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP通过闭包函数中引用的问题传递变量

PHP通过闭包函数中引用的问题传递变量
EN

Stack Overflow用户
提问于 2016-08-30 17:41:38
回答 1查看 46关注 0票数 0
代码语言:javascript
复制
<?php
/**
 * Created by PhpStorm.
 * User: james
 * Date: 8/30/16
 * Time: 12:28 PM
 */
include_once './vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;

$active_socket = [];

$coap_wk = new Worker('Coap://0.0.0.0:50008');

//print_r($coap_wk);

$http_wk = new Worker('http://0.0.0.0:8080');

$http_wk->count = 4;

//
$http_wk->onWorkerStart = function ($worker) use(&$active_socket)
{
    //global $active_socket;
    //echo "Worker's id ={$worker->id}\n";
    //$active_socket = $active_socket;
    echo count($active_socket);
    if ($worker->id === 3)
    {
        //$socket = $active_socket;

        Timer::add(5, function() use (&$active_socket) {
            var_dump(count($active_socket)); //
            //echo " 4 eggs, 4 process.\n";
            //print_r(count($active_socket));
        });

    }
};

$http_wk->onMessage = function ($connect, $data) use(&$active_socket)
{
    //global $active_socket;
    $active_socket[] = $connect;
    //var_dump($data);
    echo "onmessage";
    var_dump($active_socket);
    Timer::add(5, function() use (&$active_socket) {
        var_dump(count($active_socket));
        //echo " 4 eggs, 4 process.\n";
        //print_r(count($active_socket));
    });
    $connect->send(rand(999, 99999999));
};

Worker::runAll();

**我的问题是:**

我创建了两个回调闭包函数,并通过引用传递相同的变量。

当我收到请求时,我会在第二个回调函数上修改变量$active_socket,并将$active数组的编号改为var_dump。

根据PHP手册,如果通过引用传递变量。这意味着相同的内存地址,但是在onWorkerStart的回调函数中,我不能让onMessage更改$active_socket的值。

有人能告诉我发生了什么吗?或者我误解了PHP使用回调函数和通过引用传递变量的用法。

由衷地感谢您。

EN

回答 1

Stack Overflow用户

发布于 2017-07-14 13:33:24

关键是$http_wk->count = 4;,这意味着有4个进程。进程之间的变量是分开的。如果使用$http_wk->count = 1;,它将工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39256567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档