Function inside a function.?

前端 未结 6 1839
野性不改
野性不改 2020-11-29 03:02

This code produces the result as 56.

function x ($y) {
    function y ($z) {
        return ($z*2);
    }

    return($y+3);
}

$y = 4;
$y = x($y)*y($y);
ech         


        
6条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-29 03:54

    X returns (value +3), while Y returns (value*2)

    Given a value of 4, this means (4+3) * (4*2) = 7 * 8 = 56.

    Although functions are not limited in scope (which means that you can safely 'nest' function definitions), this particular example is prone to errors:

    1) You can't call y() before calling x(), because function y() won't actually be defined until x() has executed once.

    2) Calling x() twice will cause PHP to redeclare function y(), leading to a fatal error:

    Fatal error: Cannot redeclare y()

    The solution to both would be to split the code, so that both functions are declared independent of each other:

    function x ($y) 
    {
      return($y+3);
    }
    
    function y ($z)
    {
      return ($z*2);
    }
    

    This is also a lot more readable.

提交回复
热议问题