函数内部的函数。?

2022-08-30 08:23:39

此代码生成结果为 56。

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

    return($y+3);
}

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

你知道里面有什么吗?我很困惑。


答案 1

X 返回 (值 +3),而 Y 返回 (值*2)

给定值为 4,这意味着 。(4+3) * (4*2) = 7 * 8 = 56

尽管函数的范围不受限制(这意味着您可以安全地“嵌套”函数定义),但此特定示例容易出错:

1) 你不能在调用之前调用,因为函数在执行一次之前实际上不会被定义。y()x()y()x()

2) 调用两次会导致 PHP 重新声明函数,导致致命错误:x()y()

致命错误: 无法重新声明 y()

两者的解决方案是拆分代码,以便两个函数都声明为彼此独立:

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

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

这也更具可读性。


答案 2
(4+3)*(4*2) == 56

请注意,PHP并不真正支持“嵌套函数”,因为仅在父函数的作用域中定义。所有函数都是全局定义的。请参阅文档


推荐