2010-10-15 14 views
5

Jako sysadmin, kończę wykonywanie prostych programów ad-hoc co jakiś czas. Próbuję się uczyć, kiedy idę dalej, więc ogólnie rzecz biorąc, czy jest coś w poniższym kodzie, które wyskakuje na ciebie jako zła praktyka lub w inny sposób niepotrzebny?Unikanie duplikatu kodu (PHP)

W szczególności 3 instrukcje if na końcu wydają się niepotrzebnie duplikować kod. Czy istnieje sposób, aby skrócić to jeszcze bardziej, nie przesadzając ze złożonością?

<?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

Uwielbiam patrzeć deweloperzy faktycznie chcąc poprawić swój kod i chce zrobić wszystko poprawnie. Dam ci za to +1! Ponieważ jest późne popołudnie w piątek, prawdopodobnie nie jestem odpowiednią osobą do zatwierdzenia kodu innej osoby w tej chwili. Jednak nie widzę niczego wyraźnie nie tak. Jeśli ostatnie trzy, jeśli są wzajemnie wykluczające, możesz użyć, jeśli-else, jeśli zamiast tego, ale to jest dziurawienie. – kskjon

+0

Jak wspomniano w komentarzu powyżej wszystkie 3 IF zostaną uruchomione, jeśli jest to pożądane, wtedy twój kod jest w porządku, jeśli zamiast tego chcesz zakończyć/wyjść po każdym z nich, lub tylko pozwolić, aby jeden z nich był uruchomiony, użyj, jeśli/elseif/else etc ... –

+0

Jedyne, co mogę zrobić inaczej to zrobić klasę zamiast po prostu używać funkcji, więc nie musisz używać 'global $ output'. Poza tym, myślę, że jesteś całkiem solidny. – tplaner

Odpowiedz

3

Nie powtarzasz się niepotrzebnie, ale byłem zdezorientowany, ponieważ search_whois nie ma domeny.

bym zreorganizować tak search_whois jest samowystarczalny

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

Dziękuję, to wydaje się bardziej eleganckie. Teraz muszę po prostu dowiedzieć się, dlaczego nie widziałem rozwiązania jako takiego. Mam nadzieję, że pochodzi z doświadczenia. :) – Xhantar

+1

@Xhantar - w końcu chciałbyś sprawdzić kilka domen jednocześnie, w którym to momencie funkcja stałaby się oczywista. Powtórz ten cykl wystarczająco długo, a zaczniesz go widzieć z góry. –