2010-10-15 146 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