2014-10-29 29 views
0

我正在測試變量的功能.. $ age = 30我把變量放在函數體外:輸出是可以的,但是當我把變量之前在回聲函數..和echo ..throw錯誤之後..爲什麼?我想了解錯誤機制。 第一個例子:靜態變量php測試功能不明白錯誤機制

<?php 
function birthday(){ 
    static $age = 0; 

    $age = $age + 1; 
    $age = 30; 
    echo "Birthday number $age <br/>"; 

} 

birthday(); 
birthday(); 
birthday(); 

echo "Age: $age<br/>"; 

?> 
Output:Birthday number 30 
     Birthday number 30 
     Birthday number 30 

Notice: Undefined variable: age in C:\xampp\htdocs\series\exercitii_php\variabila_statica.php on line 18 
Age: 
Why? 

second example: 
<?php 
function birthday(){ 
    static $age = 0; 

    $age = $age + 1; 

    echo "Birthday number $age <br/>"; 
    $age = 30; 
} 



birthday(); 
birthday(); 
birthday(); 


echo "Age: $age<br/>"; 

?> 
Output: Birthday number 1 
     Birthday number 31 
     Birthday number 31 

Notice: Undefined variable: age in C:\xampp\htdocs\series\exercitii_php\variabila_statica.php on line 18 
Age: 

請給我你的解釋,所以我能理解。

+0

因爲你'$ age'是在你的函數的範圍。這是一堂課還是什麼? – vaso123 2014-10-29 17:20:12

+1

這是因爲您正在調用變量$ age超出此函數。 – 2014-10-29 17:23:00

回答

0

我想你想是這樣的:

function birthday() { 
    static $age = null; 
    if (empty($age)) { 
     $age = 30; 
    } else { 
     $age = $age + 1; 
    } 
    echo "Birthday number $age <br/>"; 
} 

birthday(); 
birthday(); 
birthday(); 

注意:你不能在全球範圍內訪問$age,因爲它在功能範圍。

如果你想讓它作爲global使用,那麼你可以不使用它作爲靜態的,但是這是最糟糕的選擇,我認爲:

global $age; 

function birthday() { 
    global $age; 
    if (empty($age)) { 
     $age = 30; 
    } else { 
     $age = $age + 1; 
    } 
    echo "Birthday number $age <br/>"; 
} 

birthday(); 
birthday(); 
birthday(); 
echo $age; 
+0

不能被overriden靜態變量?..如何使用我的例子? – 2014-10-29 17:47:30

+0

不在課堂 – 2014-10-29 17:49:24

+0

我編輯了我的代碼。但警告。這樣你總是可以覆蓋'$ age'變量。避免使用'global'關鍵字。 – vaso123 2014-10-29 17:50:07

0

$age變量是您的本地birthday方法/函數,因此,不能在該方法的範圍之外使用。爲了在腳本中的任何地方都可以使用它,你必須使它成爲腳本的全局,或者將它放在類中,使用getter/setter,或者將它公開(但這真的很髒!)。

更多信息可以在這裏找到有關的變量範圍:http://php.net/manual/en/language.variables.scope.php

+0

但是,我可以在哪裏放置全局鍵盤工作? canot被覆蓋的靜態變量? – 2014-10-29 17:43:23

+0

爲什麼你堅持使用靜態變量?他們有時候很有用,但通常會皺起眉頭。 – LokiSinclair 2014-10-29 18:26:40

+0

只有我測試功能瞭解..如何行動。 – 2014-10-29 18:30:45