2015-03-08 52 views
0

我觉得这段代码很难理解。如果我能用插图和细节理解这一点,我将不胜感激。了解PHP中的高阶函数

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 

function get_algorithm($rand_seed_fnc) { 
    return (odd_even($rand_seed_fnc())) ? 
     function($value) { 
      return $value * $value; 
     } : 
     function($value) use ($rand_seed_fnc) { 
      return ($value * $value/$rand_seed_fnc()) + 10; 
     }; 
} 

function odd_even($value) { 
    return ($value % 2 === 0); 
} 

$rand_seed_fnc = function() { return rand(); }; 
$results = array_map(get_algorithm($rand_seed_fnc), $data); 

var_dump($results); 

回答

2

多的回报,关闭,模糊,不好格式化,嵌套函数的使用,未使用的变量都存在于你的榜样。 从我测试它也不一致返回相同的值(浮动)。

我重写了它以证明逻辑背后的意图,并花费了一点时间来解开get_algorithm调用中未使用的$ rand_seed_fnc和变量赋值的可怕函数。

<?php 
    // Data to run functions on. 
    $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 

    function get_algorithm($iValue) 
    { 
     // Check if value is odd or even and return a different value. 
     // Replaces odd_even function. 
     // Uses modulus % 
     // $value = 1, returns FALSE; 
     // $value = 2, returns TRUE; 
     // $value = 3, returns FALSE; 
     // $value = 4, returns TRUE; 
     if($iValue % 2 === 0) 
     { 
      // Square the value if it's even. 
      $iReturn = $iValue * $iValue; 
     } 
     else 
     { 
      // Square the value and divide by a random number then add 10. 
      $iReturn = ($iValue * $iValue/rand()) + 10; 
     } 
     return $iReturn; 
    } 
    $results = array_map('get_algorithm', $data); 
    var_dump($results); 
?> 
+0

谢谢。这很有帮助 – 2015-03-08 18:19:19

+0

伟大的清理和好点。这可能是某人试图在一个php密码生成例程中使用混淆来创建错误的安全感。 – dreftymac 2016-11-30 21:37:41