2016-08-17 114 views
0

我是PHP新手。 我正在研究變量範圍。PHP變量全局和靜態

A variable declared outside a function has a GLOBAL SCOPE and can only be accessed outside a function.

A variable declared within a function has a LOCAL SCOPE and can only be accessed within that function.

The global keyword is used to access a global variable from within a function.

To do this, use the global keyword before the variables (inside the function)

Normally, when a function is completed/executed, all of its variables are deleted. However, sometimes we want a local variable NOT to be deleted. We need it for a further job.

我需要函數內聲明的變量是全球性的,所以我可以從函數外部訪問它,並在同一時間靜態的,所以我可以在功能執行後保留變量的值並再次使用它。 我試圖

global static $x; 

,但它不工作。

我需要知道我是否以錯誤的方式思考我是否是PHP新手。

<?php 
$x = 5; 
function myTest() { 

    echo "x is equal to".$GLOBALS['x'].""; 
    $GLOBALS['x']++; 

} 
myTest(); 
myText(); 

?> 

它只執行第一個myTest()。 ,第二個顯示一個錯誤 致命錯誤:未捕獲的錯誤:調用未定義會將myText函數()

+1

爲什麼你需要在函數內全局聲明變量?你不能在全球範圍內宣佈它嗎? –

+0

全局變量在函數執行後仍然存在,那麼爲什麼你需要它們是靜態的呢? –

+0

如果我有很多函數,比如20,30個函數,那麼在函數之外聲明變量將是一個糟糕的解決方案,這將是一個大混亂! –

回答

1

只是聲明它在全球範圍內,然後使用$GLOBALS[]陣列或global關鍵詞來使用該變量中的功能。而且,即使在函數執行後,它們仍然保留該值,因此您也不需要關鍵字static

研究$GLOBALSVariable scope

+0

請在編輯完問題後再看看,以瞭解我有什麼問題。 –

+0

@KareemAbdelwahed可能你在調用函數的時候犯了一個輸入錯誤,因爲首先定義了myTest()函數,然後調用了這個函數,但是之後調用了另一個名爲myText()的函數,這個函數在這裏沒有定義。這就是錯誤發生的原因! –

+0

@KareemAbdelwahed希望這可以幫助你加上你可以檢查出我加入的鏈接,以瞭解更多關於變量範圍的信息 –

0

可以使用靜態或全局保留值:

function doStuff() { 
    $x = null; 

    if ($x === null) { 
    $x = 'changed'; 
    echo "changed."; 
    } 
} 
doStuff(); 
doStuff(); 

的結果將是:changed.changed.

如果你使用:

function doStuff() { 
    static $x = null; 

    if ($x === null) { 
    $x = 'changed'; 
    echo "changed."; 
    } 
} 
doStuff(); 
doStuff(); 

結果將會是changed.因爲靜態保持,即使你調用函數多時間 也是全球有,因爲它的定義相同的結果,所以你也可以使用最後一個值:

global $x; 
的作用和效果

將是相同的:changed.