2011-09-12 49 views
2

我roughtly類似於此:PHP變量的作用域和IFS

function get_gender ($gid){ 
    $return= ''; 

...some code .. 

    if ($male !== 0 && $female !== 0){ 
     $return = 'mixed'; 
    }else if ($male !== 0 && $female == 0){ 
     $return = 'male'; 
    } 
    return $return; 

} 

我知道一個事實,即條件之一滿足,所以我假定$返回變量將被更新。雖然它總是回到空虛。這是範圍問題嗎?

+0

'$ male'和'$ female'設置爲什麼?它不是很清楚。 –

+0

如果'$ male === 0',它將不會進入這些條件之一。在'if else'塊裏面做一個echo來查看PHP是否到達那裏 – NullUserException

+0

另外,爲什麼不從'if-else'塊做顯式'return'而不是這個'$ return'變量?它會爲您節省幾個步驟,變量和海事組織更清潔。 – NullUserException

回答

0

不,這不是範圍問題。你的變量必須設置錯誤,所以條件不符合。也許這是因爲結果應該是一個女性(我看不到一個選項),或者這是因爲你使用明確的類型敏感的條件(也許你的變量包含字符串 - 嘗試使=====!====,看看是否有變化)

要證明這一點,嘗試添加另一個else{ }並將$return設置爲「哦noez」(或別的東西)。

4

在您的代碼中,如果$male爲零,則不會檢查$female,也不會運行任何分配,而使$return爲空。

+0

謝謝,它實際上來自於我如何加載我正在檢查的變量..儘管你們都做得很好,但與代碼無關!再次感謝 – blablabla

1

不,這是一個調試問題。範圍在這裏沒有什麼可做的,因爲它不會改變(至少不會在你提供的代碼中)。

試試這個:

if ($male !== 0 && $female !== 0){ 
    $return = 'mixed'; 
    echo 'Return: ' . $return; 
}else if ($male !== 0 && $female == 0){ 
    $return = 'male'; 
    echo 'Return: ' . $return; 
} else { 
    echo 'None of the conditions met'; 
} 

此外,你不想,而不是明確的整數檢查此(真,假)布爾值?

1

沒有範圍不應該是一個問題在這裏。

更可能是你的問題在於你的條件。特別是使用strict equality(即!==)。