2014-09-18 3 views
0

Я создал метод для создания имен аукционов websafe, и я просто добавил проверку на дублирующие веб-имена, которые в основном пытаются получить аукцион с данным именем веб-кафе, затем добавляет случайное число к webname. Но метод заканчивается возвращение нулевой ...OOP php: рекурсия метода возвращает null

private function dupplicateUrlFix($url){ 
    var_dump($url)//Correct 
    $existingAuction = Auction::get($url, "webname"); 

    //if webname exists, cancatenate with random int, and check if new webname exists 
    if(!empty($existingAuction->webname)){ 
     $newUrl = $existingAuction->webname.rand(0,9); 
     $this->dupplicateUrlFix($newUrl); 
     return; 
    } 
    var_dump($url) //Correct Not a dupplicate 
    return $url; 
} 

public function get_url_clean($string) { 
    $string = strToLower($string); 
    //cleaning.... 
    //checks for dupplicate 
    var_dump($this->dupplicateUrlFix($string)); //is null? 
    die(); 

    return $clean; 
} 

Я пытался переключать порядок в методе dupplicateUrlFix() и просто возвращает строку. Это идет только в если (пустой ... один раз

Есть ли решение для этого, или лучший подход

+0

Я не думаю, что имеет значение '$ existingAuction-> webname.rand (0,9)'. Возможно, '$ newUrl = ($ existingAuction-> webname) .rand (0,9)' – Luke

+0

@Doctus Это делает более визуальным смысл разнесен как '$ newUrl = $ existingAuction-> webname. rand (0,9)' <- конкатенация. –

+0

@MichaelBerkowski это субъективно - они оба действительны – Luke

ответ

1

Я думаю, что нет никакой необходимости рекурсии здесь:!.?

private function dupplicateUrlFix($url) { 
    $existingAuction = Auction::get($url, "webname"); 
    while (!empty($existingAuction->webname)) { 
     $url = $existingAuction->webname . rand(0, 9); 
     $existingAuction = Auction::get($url, "webname"); 
    } 

    return $url; 
} 
+0

Это работает! Спасибо! он даже выглядит намного чище :) – DalekSall

+0

Он может быть даже преобразован в 'do .. while', чтобы не писать' $ existingAuction = ... 'дважды) –

+0

У вас будет бесконечный цикл, когда вы нажмете 12-е имя. Предполагая, что метод get() попадает в базу данных, у вас будет бесконечный цикл, попадающий в базу данных. –

Смежные вопросы