我正试图为一个1000+位置生成lat和长坐标,我知道如何将它们放到一个范围和所有的地方,但我想知道我是否可以这样做。
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()没有错误,但我似乎无法让它工作,任何帮助都会很好,我试过阅读文档,但没有解释任何与此相关的内容。
这个能行吗?
发布于 2016-10-04 13:39:12
实际上,您需要调用您定义的闭包函数,如: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);
}发布于 2016-10-04 13:51:33
闭锁是一个可以像函数一样调用的对象。从输出中可以看到,当在$lat中使用print_r($lat);时,它不是调用闭包的结果,而是闭包对象本身。(由$lat = function () {...定义-参见匿名函数的PHP文档中的示例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);
}https://stackoverflow.com/questions/39853412
复制相似问题