2013-03-26 77 views
0

類似的問題已發佈,但我一直未能找到答案。如果聲明內功能不起作用

這條IF語句通過它自己正確工作。

$subject_id_top = "case studies"; 
if($subject_id_top == "case studies") {echo "active";} 

但是,當我在函數中插入這個IF語句它不起作用。

<style> 

.active { 
color:#F00; 
} 
</style> 


<?php 
$subject_id_top = "case studies"; 

function menu_active() { 
if($subject_id_top == "case studies") {echo "active";} 
} 


<a class="<?php menu_active(); ?>" href="#">Case Studies</a> 
?> 

這似乎是一個非常基本的問題,但對於我的生活,我還沒有弄明白。社區的幫助將會很好。提前致謝。

+0

其實在我的檔案裏面呢?>。我在這裏寫了這樣的意外。將糾正它。 – user2209695 2013-03-26 01:24:45

回答

1

因爲$subject_id_top裏面的功能是指$subject_id_top功能(the global scope)的範圍之內,你必須「進口」,所以說,用下面的語句:

global $subject_id_top; 

你函數應該那麼變成:

function menu_active() { 
    global $subject_id_top; 
    if($subject_id_top == "case studies") {echo "active";} 
} 

然而,依靠來自外部範圍的信息,這樣通常不是優選的。你可以重構你的函數接受參數,以規避這種行爲,像這樣,例如:

function menu_active($subject_id_top) { 
    if($subject_id_top == "case studies") {echo "active";} 
} 

然後調用這個函數$subject_id_top,從全球範圍內,作爲它的參數:

<?php menu_active($subject_id_top); ?> 
+1

或者你可以將主題ID傳遞給函數:menu_active($ subject_id_top) - 有些人反對使用像這樣的全局變量,雖然這是一個非常普遍的事情 – 2013-03-26 01:18:34

+0

@fireeyedboy正如你可以告訴我是PHP新手一樣不知道函數外的值必須是「輸入的」。感謝您解釋這一點。爲什麼這是不好的做法?它會在大環境下失敗嗎? – user2209695 2013-03-26 01:35:56

+1

我對函數中使用的全局變量進行了一些閱讀,並查看可能出現的後果。再次感謝。 – user2209695 2013-03-26 01:49:35