首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP闭包对象

PHP闭包对象
EN

Stack Overflow用户
提问于 2016-10-04 13:17:01
回答 2查看 2.8K关注 0票数 1

我正试图为一个1000+位置生成lat和长坐标,我知道如何将它们放到一个范围和所有的地方,但我想知道我是否可以这样做。

代码语言:javascript
复制
for ($i = 0; $i < 10; $i++) {
    $lat = function () {
        $float = rand(0, 99999) / 99999;
        $lat = rand(30, 32);
        $lat = $lat + $float;
        return $lat;
    };
    $long = function () {
        $float = rand(0, 99999) / 99999;
        $long = rand(74, 76);
        $long = $long + $float;
        return $long;
    };
    print_r($lat);
}

代码没有抛出想要的结果,而是

代码语言:javascript
复制
closureObject()

没有错误,但我似乎无法让它工作,任何帮助都会很好,我试过阅读文档,但没有解释任何与此相关的内容。

这个能行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 13:39:12

实际上,您需要调用您定义的闭包函数,如:echo $lat();,如果这是您想要做的事情。

正如其他人提到的,您可以用传统的php方式定义函数。类似于:

代码语言:javascript
复制
function getCoord($min, $max) {
    $float = rand(0, 99999) / 99999;
    $coord = rand($min, $max);
    $coord = $coord + $float;
    return $coord;
}

for ($i = 0; $i < 10; $i++) {
    echo "Lat: " . getCoord(30, 32) . " Long: " . getCoord(74, 76);
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-04 13:51:33

闭锁是一个可以像函数一样调用的对象。从输出中可以看到,当在$lat中使用print_r($lat);时,它不是调用闭包的结果,而是闭包对象本身。(由$lat = function () {...定义-参见匿名函数的PHP文档中的示例2)。如果您想得到这个结果,您必须使用()调用它,就像任何正常的函数调用一样。

代码语言:javascript
复制
print_r($lat());

目前,闭包并不是真正必要的,但是对于如何定义和使用闭包的示例,您可以这样做以消除重复的代码:

代码语言:javascript
复制
// assign the anonymous function to $coord
$coord = function($a, $b) {
    $float = rand(0, 99999) / 99999;
    $coord = rand($a, $b);
    return $coord + $float;
};

for ($i = 0; $i < 10; $i++) {
    // use $coord to generate coordinates for a point
    $point = [$coord(30, 32), $coord(74, 76)];
    var_dump($point);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39853412

复制
相关文章

相似问题

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