2010-05-05 14 views
5

मैं PHP लिखने के लिए सर्वोत्तम प्रथाओं को खोजने का प्रयास कर रहा हूं।PHP और स्वच्छ कोड

मुझे आश्चर्य है कि यह एक बुरी आदत है।

उदाहरण के लिए, प्रसंस्करण चर।

$var = 1 
$var = doSomething($var); 
$var = doSomething2($var); 
$var = doSomething3($var); 

यह थोड़ा भयानक लग रहा है।

$this->rSum = explode(",", $this->options["rSum"]); 
$this->rSum = array_combine(array_values($this->rSum), array_fill(0, count($this->rSum), 0)); 

कोई मुझे क्लीनर कोड लिखने के कुछ अच्छे ट्यूटोरियल पारित कर सकता है आम तौर पर यह अच्छा होगा:

यहाँ एक वास्तविक कोड है कि मैं अभी किया की एक उदाहरण है!

यह मुझे फिर से बेवकूफ सवाल पूछ रहा है। :)


वैसे ..

स्वत: कितना प्रसंस्करण मॉडल में हो सकता है?

मेरे पास एक मॉडल है जिसमें निष्पादन विधि है और जब मैं इसे कॉल करता हूं, तो यह परिभाषा फ़ाइल पढ़ने और डेटाबेस क्वेरी बनाने जैसी कई चीजें करता है।

उदाहरण

लिए
$object = new Object() 
$object->setFile("example.txt"); 
$object->execute(); 

// Then i can fetch things from it 
echo $object->getName(); 

उत्तर

3

मुझे वास्तव में आपका (असली) कोड पसंद है और यह आमतौर पर मेरे लिए अन्य व्यक्तियों के कोड को पसंद करना मुश्किल है (मेरे पास ज़ेडफ़ में खोदने के लिए अधिक समय नहीं है लेकिन उदाहरण के लिए पीयर [उनके कोडिंग मानक भी हैं] बस है भयानक आईएमओ), आपके द्वारा दिया गया पहला उदाहरण बेवकूफ लगता है लेकिन दूसरे के बारे में, कम से कम मेरे लिए और आपके द्वारा प्रदान किए गए छोटे स्निपेट से समझना वास्तव में आसान है, आपको लगता है कि आपको एक सतत कोडिंग शैली है और दाईं ओर सफेद जगहों का उपयोग करना है राशि और सही जगहों पर - यह साफ कोड के लिए बहुत मायने रखता है (यदि आप मुझ पर विश्वास नहीं करते हैं तो बस कुछ पर्ल स्निपेट पर नज़र डालें)।

मैं केवल तीन बातें कहना चाहते हैं:

  1. शब्दार्थ: हालांकि rSum एक संपत्ति यह काफी स्पष्ट है क्या मूल्यों इसे पकड़ नहीं करता है है के लिए एक भयानक नाम नहीं है, शायद आप मिल सकता है उस संपत्ति के लिए एक और वर्णनात्मक नाम?
  2. चर पुन: उपयोग: जैसा कि मैंने कहा पहले अपने पहले उदाहरण बेवकूफ लगता है, लेकिन यह दो मुख्य कारणों से चर पुन: उपयोग करने वास्तव में स्मार्ट है:
    1. आप स्मृति बर्बाद मत करो।
    2. और आप जिस क्षेत्र के साथ काम कर रहे हैं उसे प्रदूषित न करें।
  3. आपकी दूसरी "असली" उदाहरण क्लीनर और तेजी से अगर आप सही कार्यों का उपयोग हो सकता है:

    $ this-> rsum = array_flip (विस्फोट (",", $ this-> विकल्प [ " rsum "]));

संपादित:

$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0); 
: मैं बस कोड मैं ऊपर प्रदान की आप कर रहे हैं काफी क्या नहीं है ( 0 मेरे मस्तिष्क द्वारा संसाधित नहीं किया गया था) देखा है, यहाँ एक और काम कर रहा है विकल्प

यहां बहुत से लोग हैं जो एक-लाइनर पसंद नहीं करते हैं, हालांकि, मानते हैं कि उपरोक्त कोड स्पष्ट, कुशल और वर्णनात्मक है - लेकिन यह सिर्फ मुझे हो सकता है ... =)

8

स्मार्ट कोड मेरी राय में आवश्यक कोड नहीं है। मैं व्यक्तिगत रूप से कोड को समझने के लिए स्वच्छ, सरल और आसान पसंद करता हूं। आपके 2 लाइनर आपके साथी को "खराब" कोड के विपरीत, कठिन सोचने के लिए तैयार करेंगे।

सिर्फ है कि कोडिंग मानकों के अलावा वैसे भी

+1

सहकर्मी, नाशपाती नहीं: पी – Viet

3

ले मेरी, तुम PHP_CodeSniffer का उपयोग अपने मौजूदा कोड पर सामान्य संकेत प्राप्त करने के लिए कर सकते हैं।

0

जिम ली के साथ सहमत, मैं सूक्ष्म अनुकूलन या स्मार्ट लेकिन बदसूरत एक-लाइनर कोड पर पठनीय कोड भी पसंद करता हूं।

आपके पहले उदाहरण के साथ एकमात्र परेशानी यह है कि यह प्रक्रियात्मक उन्मुख कार्यों का उपयोग करता है, मैं बेहतर ओओपी को फिर से लिखूंगा (जैसे कार्यों को कॉल किया जा सकता है और पढ़ने में आसान रह सकता है)।

PHP का मजबूत ओओपी लक्ष्य नहीं है, क्योंकि यह मुख्य रूप से इसके एपीआई में प्रक्रियात्मक विवरणों का उपयोग करता है। लेकिन मैं अपने कोड को ओओ तरीके से लिखना पसंद करता हूं, अच्छी तरह से decoupled और organisated, एक साथ काम करने के लिए बहुत सारे तर्क के साथ एक बहुत सारे कार्यों के बजाय।

-3

वन चीज जो एक में eveything करने की कोशिश कर रहा है लाइन कोड धारणाओं के लिए नेतृत्व कर सकते हैं। जो मुझे वास्तव में परेशान करते हैं जब मुझे उन्हें ठीक करना होता है। ऑब्जेक्ट चेनिंग के साथ यह अधिक आम है। उदाहरण के लिए

$object->getAnotherObject()->getAThirdObject()->doSomething(); 

बहुत से लोग आपको बताएंगे कि इसे पढ़ना आसान है; हालांकि यह हर बार एक वस्तु होने पर प्रत्येक वापसी पर निर्भर करता है। मैं प्रत्येक को वापस करना पसंद करता हूं और प्रतिक्रिया की जांच करता हूं।

$secondObject = $object->getAnotherObject(); 
if (is_object($secondObject)) { 
    $thirdObject = $secondObject->getAThirdObject(); 
    if (is_object($thirdObject)) { 
     $thirdObject->doSomething(); 
    } 
} 

यह अधिक कीस्ट्रोक सुनिश्चित करता है, लेकिन यह उड़ने की संभावना कम होगी और, मुझे लगता है कि, पढ़ने के लिए आसान है।

हालांकि यह बोरिस ग्वेरी ने जो लिखा है उसे दोहराने के लायक है। सुसंगत रहें।

+0

"क्लीनर? पढ़ने के लिए आसान ?!" फ्लुएंट इंटरफेस रॉक, उदाहरण के लिए एक एसक्यूएल बिल्डर क्लास: '$ sql-> चुनें ('पोस्ट', 'शीर्षक') -> जहां (सरणी ('user_id' => 5)) -> ऑर्डर ('डेट', 'desc ') -> सीमा (10);', आपके दृष्टिकोण के साथ इसके लिए 5 बेकार इंडेंटेशन स्तर की आवश्यकता होगी क्योंकि धाराप्रवाह इंटरफ़ेस में सभी विधियों को ऑब्जेक्ट वापस करना चाहिए चाहे कोई फर्क नहीं पड़ता। –

+0

जब आप जानते हैं कि वापस क्या आ रहा है तो यह ठीक है। जब आप किसी प्रोजेक्ट में कूदते हैं और कोड के रूप में समझना शुरू करते हैं तो कैसे? आप सर्वोत्तम केस परिदृश्यों पर चीजों का आधार नहीं बना सकते हैं। क्या होगा अगर कोई उस प्रोजेक्ट का एक हिस्सा अपडेट करता है जिस पर आप काम कर रहे हैं और कुछ बदले में वस्तुओं की एक सरणी वापस कर देता है? – Khainestar

+0

डेमेटर के कानून के बारे में क्या? –

संबंधित मुद्दे