2010-10-15 18 views
5

Como sysadmin, termino haciendo una programación ad-hoc simple de vez en cuando. Estoy tratando de aprender sobre la marcha, así que, en general, ¿hay algo en el siguiente código que te parezca una mala práctica o algo innecesario?Evitar el código duplicado (PHP)

Específicamente, las 3 sentencias if al final se sienten como si estuviera duplicando el código innecesariamente. ¿Hay alguna manera de acortarlo aún más sin exagerar con la complejidad?

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

Me encanta ver a los desarrolladores realmente con ganas de mejorar su propio código y con ganas de hacer las cosas correctamente. ¡Te daré un +1 por eso! Como es tarde el viernes por la tarde, probablemente no soy la persona adecuada para validar el código de otra persona en este momento. Sin embargo, no puedo ver nada obviamente mal. Si los últimos tres if son mutuamente exclusivos, podrías usar if-else si en cambio, pero eso es quisquilloso. – kskjon

+0

Como se menciona en el comentario anterior, se ejecutarán las 3 IF, si esto es necesario, entonces su código está bien, si en lugar de eso desea finalizar/salir después de cada si, o solo permitir que 1 de ellos se ejecute, utilice if/elseif/else etc ... –

+0

Lo único que podría hacer diferente es hacer una clase en lugar de simplemente usar una función para que no tenga que usar 'global $ output'. Aparte de eso, creo que eres bastante sólido. – tplaner

Respuesta

3

No repite innecesariamente, pero estaba confundido porque search_whois no toma un dominio.

me reorganizo por lo search_whois es autónomo

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

Gracias, eso parece mucho más elegante. Ahora solo necesito descubrir por qué no vi la solución como tal en primer lugar. Espero que eso venga con la experiencia. :) – Xhantar

+1

@ Xhantar - eventualmente hubieras querido verificar varios dominios a la vez, en cuyo punto la función se habría vuelto obvia. Repita ese ciclo suficientes veces y comenzará a verlo con anticipación. –

Cuestiones relacionadas