2010-04-23 15 views
31

क्या जादू तरीके PHP में सर्वोत्तम अभ्यास हैं?क्या जादू तरीके PHP में सर्वोत्तम अभ्यास हैं?

+1

"सर्वोत्तम अभ्यास" से आपका क्या मतलब है? आपका प्रश्न वास्तव में मुझे समझ में नहीं आता है। वे उपकरण हैं, कुछ चीजें उनके बिना नहीं की जा सकती हैं। आप ठीक - ठीक क्या जानना चाहते हैं? –

+0

मैं एक पुस्तक एन ओओपी पढ़ रहा था, मुझे गेटर और सेटर का सामना करना पड़ा जहां मैंने जादू विधि शब्दावली देखी .. लेकिन एक बार जब किसी ने मुझे बताया कि उन्हें बहिष्कृत किया गया है, तो क्या ऐसा है ?? –

+2

मेरा अनुमान है कि वह सोचता है कि वे चुपके/धोखाधड़ी कर रहे हैं (जैसे 'i ++' और 'goto' या वह चिंतित हैं कि वे अत्यधिक उपयोग या अविश्वसनीय हैं। हाँ, स्टाइल के लिए टेबल का उपयोग करना। – Anthony

उत्तर

21

मुझे नहीं लगता कि जादू के तरीके सबसे अच्छे या सबसे खराब अभ्यास हैं: आप जो हासिल करना चाहते हैं उसके आधार पर आप उनका उपयोग कर सकते हैं या नहीं ... मेरा मतलब यह है कि आपको जितना संभव हो सके अपना कोड ट्विक नहीं करना है उनका उपयोग करने के लिए, लेकिन अगर आपको कोई समस्या नहीं है तो कोई समस्या नहीं है।

यदि आपके पास 3 और केवल 3 विशेषताओं वाले ऑब्जेक्ट हैं तो आपको जादू सेटर्स/गेटर्स का उपयोग करने की आवश्यकता नहीं है, लेकिन कुछ उन्नत मामलों में वे बहुत जटिल चीजें करने के लिए एक शानदार तरीका हैं (ओआरएम सिस्टम इत्यादि ...)

शायद उनमें से कुछ को बहिष्कृत किया गया है, मुझे नहीं पता, लेकिन उनमें से अधिकतर नहीं हैं।

3

मुझे ऐसा नहीं लगता है। मेरा आईडीई मुझे जादू सेटटर और गेटर्स के लिए "संकेत" दिखाने में सक्षम नहीं है। कोड को कभी-कभी डीबग करना कठिन होता है।

मैं उनका उपयोग नहीं करना पसंद करता हूं, bette मेरे विचार से आवश्यक विधियों (जैसे कई सेटर्स और गेटर्स) उत्पन्न करता है।

+2

जो गेटर्स और सेटर्स पर लागू हो सकते हैं, लेकिन '__construct', '__clone' आदि नहीं हैं," जादुई तरीकों "भी माना जाता है? http://php.net/manu al/en/language.oop5.magic.php उनके बिना कोई काम कैसे करेगा? –

+0

सही @Potter i Mean @Pekka :) –

6

कम से कम, इन जादू कार्यों में से कुछ गूगल द्वारा सिफारिश कर रहे हैं:

बचें अनुभवहीन setters और getters

जब PHP में वर्गों लेखन, आप समय की बचत करने और अपने की गति बढ़ा सकता लेखन के बजाय बेवकूफ सेटर्स और गेटर्स लिखने के बजाय ऑब्जेक्ट गुणों के साथ सीधे काम करके स्क्रिप्ट। निम्नलिखित उदाहरण में, कुत्ते कक्षा संपत्ति का उपयोग करने के लिए setName() और getName() विधियों का उपयोग करती है।

class dog { 
    public $name = ''; 

    public function setName($name) { 
    $this->name = $name; 
    } 

    public function getName() { 
    return $this->name; 
    } 
} 

सूचना है कि setName() और getName() की दुकान से ज्यादा कुछ नहीं करते हैं और क्रमशः नाम संपत्ति लौटने के लिए,।

$rover = new dog(); 
$rover->setName('rover'); 
echo $rover->getName(); 

सेटिंग और बुला नाम संपत्ति सीधे up to 100% faster चला सकते हैं विकास समय पर नीचे काटने के साथ ही,।

$rover = new dog(); 
$rover->name = 'rover'; 
echo $rover->name; 

वास्तविक लिंक: http://code.google.com/speed/articles/optimizing-php.html

संग्रहीत संस्करण: https://web.archive.org/web/20120208060457/http://code.google.com/speed/articles/optimizing-php.html

वैसे भी, इन तरीकों नहीं performant हो सकता है, लेकिन वे सब पर पदावनत नहीं है।

+2

और यहां एक और राय: http://www.garfieldtech.com/sites/default/files/benchmarks.png: डी (देखें http: //www.garfieldtech .com/ब्लॉग/जादू-बेंचमार्क) – Rolf

+1

यह उत्तर पूरी तरह से ऑफ-विषय है। "Google" देशी गेटर्स/सेटर्स बनाम जादू कार्यों का उपयोग करने के खिलाफ नहीं जाता है। वे मूल गेटर्स/सेटर्स का उपयोग करने के खिलाफ सलाह देते हैं यदि वे केवल संपत्ति को सीधे संशोधित करते हैं। यह वही बात नहीं है। –

+0

वे "बेवकूफ" गेटर्स/सेटर्स का उपयोग करने के खिलाफ जाते हैं। उस समय प्रारंभिक प्रश्न के लोकप्रिय उत्तर (3 साल पहले, बीटीडब्ल्यू, यहां मेरा परिचय है: http://xkcd.com/386/) जादू विधियों को बहिष्कृत करने का सुझाव दे रहे थे। मेरा जवाब सिर्फ एक मुद्दा बना रहा था कि यह एक पूर्ण सत्य नहीं था। – Rolf

39

विपक्ष

  1. पाठ खोज कार्यों नहीं पाते

  2. सिस्टम को समझने के लिए कठिन है, विशेष रूप से नए चेहरे

  3. पुनर्रचना उपकरण हो सकता है के लिए अधिक बार असफल हो जाते हैं

आम तौर पर, जादू के तरीके दृश्यों के पीछे चीजें करते हैं और प्रोग्रामर को ऐसा नहीं लगता है कि यह हो रहा है जो डीबगिंग को कठिन बनाता है।

फ़ंक्शंस (या अन्य प्रतीकों) की खोज करते समय सभी मैचों को नहीं मिल सकता है, यह पुराने कोड को हटाने के लिए एक दुःस्वप्न बन जाता है और यह डर कोडबेस में मृत कोड को ढेर कर सकता है। यदि मृत कोड हटा दिया गया है, तो यह अज्ञात स्थानों में टूटने का कारण बन सकता है।

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