【问题标题】:Using a function in php - what am I doing wrong?在 php 中使用函数 - 我做错了什么?
【发布时间】:2015-11-19 01:34:37
【问题描述】:
$users = [
    "Andrew",
    "Max",
    "Larry",
    "Ricardo",
    "Lucy",
    "Marcus",
    "Sophie"
];

$sector_rel = [];
$location_rel = []; 

function sectorRel($user){
    return sector_rel[] = round(1/rand(1,10),3);
}

function locationRel($user){
    return $location_rel[] = round(1/rand(1,20),3);
}


foreach($users as $user){
    sectorRel($user);
    locationRel($user);
}

【问题讨论】:

  • 您需要细化您的问题。你想做什么?
  • 你遇到了什么问题?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为和特定的问题或错误。
  • $sector_rel$location_rel 在 for 循环结束后不会被填充(如果这是您所期望的),因为它们在全局范围内

标签: php function return


【解决方案1】:

这个:

function sectorRel($user){
    return sector_rel[] = round(1/rand(1,10),3);
}

应该/可能是:

function sectorRel($user){
    global sector_rel;
    sector_rel[] = round(1/rand(1,10),3);
}

问题在于函数无法访问数组变量。如果它们确实是全局变量,您可以使用关键字 global 将它们导入函数范围。现在,拥有全局变量并不是一件好事,对于一个小测试来说没关系,但最终你将消除你的全局变量,这个解决方案将不起作用。

但是,您也可以将数组变量作为参数传递给函数。但是,这仍然在函数中引入了很多逻辑。函数必须被告知数组,它必须知道它需要在末尾添加一个值,并且它还需要计算实际要添加的值。

所以更好,让函数只返回计算值并将其添加到函数外部的数组中:

function sectorRel($user){
    // Assuming your are going to use 'user' here somewhere?
    return round(1/rand(1,10),3); 
}

function locationRel($user){
    return round(1/rand(1,20),3);
}

foreach($users as $user){
    sector_rel[] = sectorRel($user);
    $location_rel[] = locationRel($user);
}

然后,您可以将整个 sn-p 代码包装到另一个函数中并调用它来填充数组。这样一来,您就可以相当合理地划分函数的职责,并拥有一段看起来既漂亮又干净的代码。

【讨论】:

    【解决方案2】:

    您不需要在sectorRellocationRel 中使用return。目前这将返回对该数组的引用,并且它没有存储在变量中。您需要将它们存储在一个变量中,或者只是摆脱返回。我的 PHP 目前有点弱,但您可能应该将这些函数中的值附加到数组中。

    此外,如果您对每个函数都有一个名为 $user 的参数,您应该使用该参数或直接去掉它。

    【讨论】:

      猜你喜欢
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2010-10-23
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多