2010-10-15 139 views
5

作爲一個系統管理員,我偶爾會做一些簡單的臨時編程。我一直在努力學習,所以一般來說,下面的代碼中有什麼會跳出來,因爲你是不好的練習還是不必要的?避免重複的代碼(PHP)

具體來說,最後3條if語句感覺就像我在不必要地複製代碼。有沒有什麼辦法可以進一步縮短它,而不會過度複雜?

<?php 

define('TAKEN', 'Match: One'); 
define('AVAIL', 'Match: No Matches'); 
define('DATAMINE', 'Data mining count exceeded'); 

$ch = curl_init("http://co.za/cgi-bin/whois.sh?Domain=example"); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$output = curl_exec($ch); 

function search_whois($findit) { 
     global $output; 
     if (strpos($output, $findit) === false) 
        return false; 
     if (is_int(strpos($output, $findit))) 
       return true; 
} 

if (search_whois(TAKEN)) 
     echo "Domain is taken.\n"; 

if (search_whois(AVAIL)) 
     echo "Domain is available.\n"; 

if (search_whois(DATAMINE)) 
     echo "Blocked for datamining, try again later.\n"; 

// var_dump($output); 

?> 
+4

我喜歡看到開發商居然想提高自己的代碼,並希望做正確的事情。我會給你一個+1! 由於週五下午很晚,我可能不是現在驗證某人代碼的合適人選。但是,我看不出有什麼明顯的錯誤。如果最後三個if是互斥的,你可以使用if-else來代替,但這是挑剔的。 – kskjon 2010-10-15 13:05:58

+0

如上面評論中提到的那樣,所有3個IF將運行,如果這是想要的,那麼你的代碼是好的,如果你想在每個if後結束/退出,或者只允許其中一個運行,那麼使用if/elseif /別的等等...... – 2010-10-15 13:07:41

+0

我唯一可能做的不同是讓一個類而不是簡單地使用一個函數,所以你不必使用'global $ output'。除此之外,我認爲你很穩固。 – tplaner 2010-10-15 13:15:00

回答

3

你不會不必要地重複,但我很困惑,因爲search_whois不接受域。

我會重組,以便search_whois自成體系

function search_whois($domain) { 
    $ch = curl_init("http://co.za/cgi-bin/whois.sh?Domain=$domain"); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    $output = curl_exec($ch); 

    if (strpos($output, AVAIL) >= 0) { 
     echo "Domain is available.\n" 
     return true; 
    } 

    if (strpos($output, TAKEN) >= 0) 
     echo "Domain is taken.\n"; 
    else if (strpos($output, DATAMINE) >= 0) 
     echo "Blocked for datamining, try again later.\n" 

    return false; 
} 
+0

謝謝,這似乎更優雅。現在我只需要弄清爲什麼我首先看不到解決方案。希望有經驗。 :) – Xhantar 2010-10-15 14:05:17

+1

@Xhantar - 最終你會想要一次檢查幾個域,此時該功能將變得明顯。重複該週期足夠多的時間,你會開始看到它。 – 2010-10-15 14:27:48