2014-01-16 58 views
1

我有以下代碼:PHP作用域和全球

<html> 
<body> 
    <h1><?isFoo();?></h1> 
</body> 
</html> 
<?php 
$foo_app_cookie_val = "foo"; 

function isFoo() { 
    global $foo_app_cookie_val; 
    echo "in isFoo: '$foo_app_cookie_val'<br/>"; 
    return isApp($foo_app_cookie_val); 
} 
?> 

我得到的輸出是:

isFoo: '' 

爲什麼不是我看到的$ foo_app_cookie_val的實際價值?

+0

什麼是isApp() –

+4

'$ foo_app_cookie_val'在調用isFoo()'時未定義。 – Antony

+0

沒錯。喲在致電下襬前先定義這些東西。您正在運行以上。也改變到<?php isFoo(); ?> –

回答

10

$foo_app_cookie_val正在設置爲foo之後<h1><?isFoo();?></h1>被輸出。腳本更改爲:

<?php 
$foo_app_cookie_val = "foo"; 

function isFoo() { 
    global $foo_app_cookie_val; 
    echo "in isFoo: '$foo_app_cookie_val'<br/>"; 
    return isApp($foo_app_cookie_val); 
} 
?> 
<html> 
<body> 
    <h1><?isFoo();?></h1> 
</body> 
</html> 
+0

** ** facepalm **'我太習慣於不接受聲明的語言爲了考慮:( – ThaDon

4

isFoo()你設置的$foo_app_cookie_val值之前被調用。嘗試將大塊PHP代碼移動到文件頂部,如下所示:

<?php 
$foo_app_cookie_val = "foo"; 

function isFoo() { 
    global $foo_app_cookie_val; 
    echo "in isFoo: '$foo_app_cookie_val'<br/>"; 
    return isApp($foo_app_cookie_val); 
} 
?> 
<html> 
<body> 
    <h1><?isFoo();?></h1> 
</body> 
</html> 

其中函數實際聲明並不重要。重要的是你調用與設置全局變量相關的函數。