函数里面的函数。
这段代码产生56的结果。
function x ($y) { function y ($z) { return ($z*2); } return($y+3); } $y = 4; $y = x($y)*y($y); echo $y;
任何想法是什么在里面? 我很困惑。
X返回(值+3),而Y返回(值* 2)
给定值4,这意味着(4+3) * (4*2) = 7 * 8 = 56
。
尽pipe函数的范围不受限制(这意味着您可以安全地“嵌套”函数定义),但这个特定的例子很容易出错:
1)在调用x()
y()
之前,不能调用y()
,因为在x()
执行一次之前函数y()
将不会被定义。
2)调用x()
两次会导致PHP重新声明函数y()
,导致一个致命的错误:
致命错误:无法重新声明y()
两者的解决办法是分割代码,这样两个函数都是相互独立的:
function x ($y) { return($y+3); } function y ($z) { return ($z*2); }
这也是更可读性。
(4+3)*(4*2) == 56
请注意,PHP并不真正支持“嵌套函数”,因为只在父函数的范围内定义。 所有function都是全局定义的。 看文档 。
不知道该代码的作者想要达到什么。 在另一个函数中定义一个函数并不意味着内部函数只在外部函数中可见。 在第一次调用x()之后,y()函数也将在全局范围内。
这是没有静态属性,参考等recursion的有用的概念:
function getReqursiveItems($id){ $allItems = array(); function getItemms($parent_id){ return DB::findAll()->where('`parent_id` = $parent_id'); } foreach(getItems($id) as $item){ $allItems = array_merge($allItems, getItems($item->id) ); } return $allItems; }
可以从另一个函数内部定义一个函数。 内部函数在外部函数执行之前不存在。
echo function_exists("y") ? 'y is defined\n' : 'y is not defined \n'; $x=x(2); echo function_exists("y") ? 'y is defined\n' : 'y is not defined \n';
产量
y没有定义
y被定义
简单的事情你不能在执行x之前调用函数y
你的查询是做7 * 8
x(4) = 4+3 = 7
和y(4) = 4*2 = 8
当函数x被调用的时候会发生什么,它会创build函数y,而不会运行它。