php
2017-08-10 80 views 0 likes 
0

我試圖用twitter功能登錄。遞歸函數調用不按預期方式工作

如果twitter返回用戶名已存在於我的數據庫中我正在爲該用戶創建一個新的用戶名。

下面是我的代碼

class myclass{ 
    function getusername($username){ 
     global $db; 
     $sql ="select * from us_signup where username ='".$username."'"; 
     echo $sql; 
     $results = $db->rawQuery($sql);  

     if(!empty($results)){ 
     echo 'if'; 
     print_r($username); 
      $username = $username.rand(0,1000); 
      $this->getusername($username); 
     }else{ 
     echo "else"; 
     print_r($username); 
      return $username; 
     } 
    } 

    function insertintodb(){ 
     echo "oldusername : ".$username; 
     $username = $this->getusername($username); 
     echo "newusername : ". $username; 
    } 

} 

1)insertintodb電話與CURRENTUSERNAME getusername從Twitter

得到

2)getusername檢查它在數據庫

3)如果用戶名存在於數據庫中那麼它會給它添加一個隨機數然後調用它自己

4)如果用戶名不在它返回的用戶名

5,直到它找到它不存在於數據庫中的用戶名getusername自稱數據庫)存在

我的問題是

我打電話的功能getusername與' sugumar',它存在於數據庫 中,所以它再次調用newusername'sugumar1234'(1234是一個隨機數可以是任意數)。 「sugumar1234」不存在於數據庫中,所以我希望它返回「sugumar1234」,但它沒有返回

打印的輸出中

oldusername如下:sugumarselect *從us_signup其中username =「sugumar」 ifsugumarselect *從us_signup其中username ='1234'else1234newusername:

回答

3

如果我理解正確的,一個return聲明似乎在你的代碼的if部分失蹤。

$this->getusername('1234'); 

應該

return $this->getusername('1234'); 
+0

,如果你不介意的話,你可以請解釋一下爲什麼我應該需要返回......因爲我真的不明白.... –

+0

當你調用'getUserName ''帶有'sugumar'參數,這個名字存在於數據庫中,因此函數'getUserName'用一個新的(隨機化的)參數調用自己,這次新的參數表(假設'foo')不存在於數據庫中,所以它通過'return $ username;'語句返回。但是,這個返回值不會影響任何變量,也不會在第一個'getUserName'調用(具有'sugumar'參數的調用)中返回,因此它將丟失並且該函數不會返回任何內容。不知道我是否清楚,如果不清楚,我可以制定計劃。 –

相關問題