[英]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.