我正在尝试为大约1000多个地点生成长期和长期的坐标,我知道如何将它们放在一个范围内,但我想知道我是否可以做这样的事情。
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);
}
代码没有抛出所需的结果,我正在
closureObject()
没有错误,但我似乎无法让它工作,任何帮助都会很精彩,我已经尝试阅读文档,但没有解释与此相关的任何内容。
这可以吗?
答案 0 :(得分:1)
你需要实际调用你定义的Closure函数,如:echo $lat();
如果你正在尝试这样做。
正如其他人所说,你可以用传统的php方式定义一个函数。类似的东西:
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 :(得分:0)
closure是一个可以像函数一样调用的对象。正如您在输出中看到的那样,当您在$lat
中使用print_r($lat);
时,它不是调用闭包的结果,而是闭包对象本身。 (由$lat = function () {...
定义 - 参见PHP documentation for anonymous functions中的示例2),.如果你想得到那个结果,你必须用()
来调用它,就像任何正常的函数调用一样。
print_r($lat());
目前,关闭并不是必需的,但是对于如何定义和使用闭包的示例,您可以这样做以消除重复的代码:
// 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);
}