[英]Nesting PHP-functions: to what purpose?
为什么PHP允许嵌套函数?
<?php
function foo() {
function bar() {
return "bar";
}
return "foo";
}
print foo();
print bar();
..是有效的PHP。
但:
我今天碰到了这个,因为我在某个地方忘记了一个结束括号,而且还有一个太多了。 代码有效,没有错误抛出; 但这一切都开始表现得非常奇怪。 函数未被声明,回调变得狂暴等等。 这是一个功能,如果是这样,目的是什么? 还是有些特质?
答案 :评论员指出这是什么是php嵌套函数的副本 。
请注意,订单在这里很重要; 你不能在你的例子中调用foo()之前调用bar()。 这里的逻辑似乎是foo()的执行定义了bar()并将其置于全局范围内,但是由于范围的限制,它没有在执行foo()之前定义。
这里的用法是函数重载的原始形式; 你可以让你的bar()函数执行不同的操作,具体取决于foo()的哪个版本声明它,当然假设每个不同版本的foo()确实定义了一个bar()函数。
在PHP中,您可以有条件地定义函数,运行时常量甚至类。 这允许您根据具体情况定义不同的函数/常量/类。
简单示例:根据应用程序中是否打开或关闭多字节支持来定义String\\Length
函数。
namespace String;
if (\MULTIBYTE_MODE) {
function Length($string) {
return strlen($string);
}
} else {
function Length($string) {
return mb_strlen($string);
}
}
嵌套函数只是条件函数定义的特例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.