<?php
$foo = 1;
function meh(){
// <-- $foo can't be accessed
}
它看起來不像是全球性的,但事實上這個變量在外面是否有像全球性的東西一樣的缺點?函數外面的變量是一種全局變量嗎?
<?php
$foo = 1;
function meh(){
// <-- $foo can't be accessed
}
它看起來不像是全球性的,但事實上這個變量在外面是否有像全球性的東西一樣的缺點?函數外面的變量是一種全局變量嗎?
是的。可以從任何位置訪問它們,包括其他腳本。他們是略微更好,因爲你必須使用global
關鍵字從一個函數內訪問它們,這使得它們更加清晰地表明它們來自哪裏以及它們的作用。
The disadvantages of global variables apply,但這並不能立即使它們成爲邪惡的,正如在某些面嚮對象語言中經常被察覺的那樣。如果他們提供了一個高效且易於理解的好解決方案,那麼你很好。實際上有數百萬成功的PHP項目使用這樣的全局變量聲明。你可以做的最大的錯誤就是沒有使用它們,並且如果首先使用它們的話可能會讓你的代碼變得更加複雜。 :D
<?php
$foo = 1;
function meh(){
global $foo;
// <-- $foo now can be accessed
}
?>
功能的外面是八九不離十像全球範圍內(相比於C的語言),但你必須做的一件事,讓一個函數內訪問VAR:
function meh(){
global $foo;
// $foo now exists in this scope
}
在您的示例中$foo
在全局範圍內被創建爲變量。 (除非在另一個函數/方法範圍內顯示的腳本是included()
)。
PHP沒有真正的全局變量。您必須使用global $foo;
語句手動將其別名,才能訪問它們。 (也是「什麼東西全球都不好」建議就是這樣,壞建議。)
如果我正確理解你的問題,真的不應該有問題。除非將變量聲明爲全局變量,否則它將被限制在聲明的範圍內,在這種情況下,無論上面的代碼是在哪個php文件中定義的。您都可以在meh()中聲明另一個變量$ foo,它會是獨立於外部定義的$ foo。
在全局範圍內聲明在任何函數外部定義的所有變量。如果你想訪問一個全局變量,你有兩個選擇:
使用全球關鍵字
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
?>
或者使用$ GLOBALS
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
?>
閱讀更多at http://php.net/manual/en/language.variables.scope.php