2010-10-15 69 views
5

Như một sysadmin, tôi sẽ thực hiện một số chương trình ad-hoc đơn giản mỗi lần trong một thời gian. Tôi đang cố gắng tìm hiểu khi tôi đi cùng, vì vậy nói chung, có bất cứ điều gì trong đoạn code dưới đây nhảy ra ngoài bạn như là thực hành xấu hay không cần thiết?Tránh mã trùng lặp (PHP)

Cụ thể, báo cáo 3 if ở cuối có vẻ như tôi đang sao chép mã không cần thiết. Có cách nào để rút ngắn hơn nữa mà không đi overboard với sự phức tạp?

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

Tôi yêu nhìn thấy các nhà phát triển thực sự muốn cải thiện mã riêng của họ và muốn làm những việc đúng cách. Tôi sẽ cung cấp cho bạn một +1 cho điều đó! Vì đã đến chiều thứ Sáu, tôi có lẽ không phải là người thích hợp để xác thực mã người khác ngay bây giờ. Tuy nhiên, tôi không thể thấy bất cứ điều gì rõ ràng là sai. Nếu ba cuối cùng nếu là loại trừ lẫn nhau, bạn có thể sử dụng if-else nếu thay vào đó, nhưng đó là nitpicking. – kskjon

+0

Như đã đề cập trong phần bình luận trên, tất cả 3 IF sẽ chạy, nếu điều này là muốn thì ya mã của bạn là tốt, nếu thay vào đó bạn muốn kết thúc/thoát sau mỗi nếu, hoặc chỉ cho phép 1 trong số chúng chạy thì sử dụng if/elseif/khác ... –

+0

Điều duy nhất tôi có thể làm khác là tạo một lớp thay vì chỉ đơn giản là sử dụng một hàm để bạn không phải sử dụng 'output $ global'. Ngoài ra, tôi nghĩ bạn khá vững chắc. – tplaner

Trả lời

3

Bạn không lặp lại không cần thiết, nhưng tôi đã nhầm lẫn vì search_whois không có miền.

tôi muốn tổ chức lại để search_whois là khép kín

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

Cảm ơn bạn, điều đó có vẻ thanh lịch hơn. Bây giờ tôi chỉ cần tìm ra lý do tại sao tôi không thấy giải pháp như vậy ngay từ đầu. Hy vọng rằng đi kèm với kinh nghiệm. :) – Xhantar

+1

@Xhantar - cuối cùng bạn sẽ muốn kiểm tra một số tên miền cùng một lúc, tại thời điểm đó chức năng sẽ trở nên rõ ràng. Lặp lại chu kỳ đó đủ thời gian và bạn sẽ bắt đầu thấy nó trước. –

Các vấn đề liên quan