簡體   English   中英

嵌套PHP函數:用於什么目的?

[英]Nesting PHP-functions: to what purpose?

為什么PHP允許嵌套函數?

<?php
function foo() {
    function bar() {
        return "bar";
    }
    return "foo";
}
print foo();
print bar();

..是有效的PHP。

但:

  1. 為什么需要嵌套?
  2. 即使如此,為什么我可以從任何地方調用bar(而不是,例如只用foo(),或者通過foo.bar()等。

我今天碰到了這個,因為我在某個地方忘記了一個結束括號,而且還有一個太多了。 代碼有效,沒有錯誤拋出; 但這一切都開始表現得非常奇怪。 函數未被聲明,回調變得狂暴等等。 這是一個功能,如果是這樣,目的是什么? 還是有些特質?

答案 :評論員指出這是什么是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM