2014-10-29 30 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