簡體   English   中英

如何從父函數的范圍訪問變量?

[英]How to access variable from scope of parent function?

我希望我的函數專門從其父函數訪問外部變量。 但是,使用global關鍵字設置范圍太廣; 我需要限制它。 如何讓這段代碼吐出'Level 2'而不是'Level 1'? 我必須上課嗎?

<?php
$a = "Level 1";

function first() {
    $a = "Level 2";

    function second() {
        global $a;
        echo $a.'<br />';
    }

    second();
}

first();
//outputs 'Level 1'
?>

僅僅為了舉例,如果我理解你要做什么,你可以使用一個閉包 (PHP 5.3+),因為“ 閉包也可以 use關鍵字從父作用域繼承變量 ”。

$a = "Level 1";

function first() {
    $a = "Level 2";

    $func = function () use ($a) {
        echo $a.'<br />';
    };

    $func();
}

first();
// prints 'Level 2<br />'

閉包最常用於回調函數。 但是,這可能不是使用它的最佳方案。 正如其他人所說的那樣,僅僅因為你可以做某事並不意味着它是最好的主意。

PHP沒有嵌套函數或作用域的概念,嵌套函數是一種可怕的做法。 什么情況是,PHP只是遇到一個函數聲明並創建一個正常功能second 如果你試圖調用first一次,PHP會再次遇到了一個函數聲明second和崩潰,因為函數second已聲明。 因此,不要在函數內聲明函數。

至於傳遞值,要么顯式地將它們作為函數參數傳遞,要么如果有意義的話,創建一個類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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