2013-04-28 78 views
1

返回值我有一個PHP函數:無法從功能

function unserialize_recursive($data, $i = 0) { 

    $unserialized = unserialize($data); 

    if ($unserialized) { 
     $i++; 
    } 

    if (!is_string($unserialized) || unserialize($unserialized) === FALSE) { 
     /* placeholder - see explanation below */ 
     return array($i, $unserialized); 
    } elseif (unserialize($unserialized) !== FALSE) { 
     unserialize_recursive($unserialized, $i); 
    } 
    return FALSE; 
} 

我調用這個函數有:

$data = unserialize_recursive($serialized_string); 
var_dump($data); 

var_dump($data)輸出爲bool(false)

但是,如果我在文本/* placeholder - see explanation below */的位置添加var_dump($unserialized),我會得到預期的輸出。

那麼,爲什麼我不能返回該變量($unserialized)?如果我在該函數中使用gettype(),則返回array

我正在使用Netbeans,並且所有語法突出顯示代碼已正確形成,沒有輸入錯誤。我很困惑。我錯過了真正明顯的東西嗎?

+0

爲什麼你使用'FALSE'而不是'false'? – Dai 2013-04-28 20:13:43

+0

我想你忘了回報。您可能還需要通過引用傳遞您的$ i參數。 – Revent 2013-04-28 20:15:09

+0

@戴:雖然這個問題是非常不相關的,我有我懷疑你真的感興趣,答案是,我出於可讀性原因使用大寫版本。 – EpF 2013-04-28 20:34:17

回答

0

你缺少的

unserialize_recursive前回報($反序列化,$ I);

因此,它應該是這樣的

回報 unserialize_recursive($反序列化,$ I);

沒有返回函數會自己運行,但如果條件和執行返回FALSE,然後離開。通過在前面放置返回,可以結束當前功能並啓動另一個功能。

+0

謝謝 - 關於結束函數和啓動另一個函數的這一行是對我最有意義的部分,儘管實際上我仍然爲什麼它不能像我第一次寫它那樣工作而感到困惑。 – EpF 2013-04-28 20:30:49

2

我的猜測是,你忘了回報:

function unserialize_recursive($data, $i = 0) { 

$unserialized = unserialize($data); 

if ($unserialized) { 
    $i++; 
} 

if (!is_string($unserialized) || unserialize($unserialized) === FALSE) { 
    /* placeholder - see explanation below */ 
    return array($i, $unserialized); 
} elseif (unserialize($unserialized) !== FALSE) { 
    return unserialize_recursive($unserialized, $i); 
} 
return FALSE; 
} 
1

你在你的函數中使用遞歸。

因此,您的var_dump($ unserialized)從遞歸調用中調用,但主調用返回false。

您可能需要更改「unserialize_recursive($ unserialized,$ i);」到

return unserialize_recursive($unserialized, $i);