2010-08-12 15 views
11

के समान नाम के साथ विधि मैंने हाल ही में PHP शुरू किया है और __construct() के बीच अंतर और कक्षा के समान नाम के साथ एक विधि सोच रहा था?__construct() बनाम विधि

क्या इसका उपयोग करने का कोई कारण है? क्या मैं काम कर सकता हूं क्या यह फू नामक विधि को ओवरराइड करता है या क्या आप इसे पसंद करते हैं?

उदा।

class Foo { 

    function Foo() 
    { 
     echo 'Foo stated<br>'; 
    } 

    function __construct() { 
     echo 'Construct started<br>'; 
    } 
} 

धन्यवाद

+0

PHP में कन्स्ट्रक्टर के लिए [\ _ \ _ निर्माण() बनाम SameAsClassName() बनाम संभावित डुप्लिकेट] (http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in-php) – nawfal

उत्तर

3

फू() एक php4 रास्ता (बहिष्कृत), __construct() PHP5 तरीका है। php सबसे पहले __construct की तलाश करेगा, फिर, यदि यह नहीं मिला है, तो यह Foo

+0

बहुत बहुत धन्यवाद। – Joe

7

"का उपयोग करेगा" यदि PHP 5 किसी दिए गए वर्ग के लिए __construct() फ़ंक्शन नहीं ढूंढ पाता है, तो यह पुरानी शैली के कन्स्ट्रक्टर फ़ंक्शन की खोज करेगा कक्षा का नाम। प्रभावी रूप से, इसका मतलब है कि एकमात्र मामला जिसमें संगतता के मुद्दे होंगे, यदि कक्षा में __construct() नामक एक विधि थी जिसका प्रयोग विभिन्न अर्थशास्त्र के लिए किया गया था। "

स्रोत:http://www.php.net/manual/en/language.oop5.decon.php

8

__construct() का उपयोग करते हुए एक निर्माता कॉल करने के लिए नए PHP5 अधिक OOP ध्यान केंद्रित विधि है। कक्षा के समान नाम के साथ एक विधि का उपयोग करना इसे करने का पुराना बहिष्कृत तरीका है, और यह नामित कक्षाओं के लिए PHP 5.3.3 के रूप में एक कन्स्ट्रक्टर के रूप में कार्य नहीं करेगा।

the constructors and destructors page से:

पश्च संगतता के लिए, यदि PHP 5 किसी वर्ग के लिए एक __construct() फ़ंक्शन नहीं मिल रहा है, यह पुरानी शैली निर्माता समारोह के लिए खोज करेंगे, वर्ग के नाम से। प्रभावी रूप से, इसका मतलब है कि एकमात्र मामला जिसमें संगतता के मुद्दे होंगे, यदि कक्षा में __construct() नामक एक विधि थी जिसका प्रयोग विभिन्न अर्थशास्त्र के लिए किया गया था।

अन्य तरीकों के साथ विपरीत, पीएचपी एक E_STRICT स्तर त्रुटि संदेश __construct() माता-पिता __construct से विभिन्न मापदंडों के साथ ओवरराइड की गई है उत्पन्न नहीं करेगा() विधि है।

PHP 5.3.3 के अनुसार, नामित कक्षा के नाम के अंतिम तत्व के समान नाम वाले विधियों को अब कन्स्ट्रक्टर के रूप में नहीं माना जाएगा। यह परिवर्तन गैर-नामित कक्षाओं को प्रभावित नहीं करता है।

0

वर्ग है, जो स्वचालित रूप से एक निर्माता के रूप में कहा जाता है के रूप में एक ही नाम के साथ एक विधि के बाद PHP4 के लिए एक विपर्ययण है, और पदावनत पर विचार किया जाएगा ... पीएचपी के नवीनतम विकास शाखा में है, यह एक सामान्य वर्ग विधि के रूप में माना जाना चाहिए। __construct PHP5 में औपचारिक रूप से स्वीकार्य कन्स्ट्रक्टर है, हालांकि वर्तमान रिलीज़ में यह PHP4 विधि पर वापस आ जाएगा यदि __construct मौजूद नहीं है।

3

क्या इसका उपयोग करने का कोई कारण है? मैं सभी काम कर सकता हूं क्या यह फ़ू नामक विधि को ओवरराइड करता है या यह पर है जिसे आप पसंद करते हैं?

__construct() का लाभ जब आप नामकरण और विरासत शामिल करते हैं तो स्पष्ट हो जाते हैं। यदि आप किसी वर्ग का नाम बदलते हैं, तो आपको इसके निर्माता का नाम बदलना होगा।कोई बड़ी बात नहीं है, लेकिन अगर वर्ग बी वर्ग एक से विरासत आप लग सकती है:

class B extends A { 
    function B() { 
     parent::A(); 
    } 
} 

यह क्या करने के लिए बहुत आसान है और अधिक maintainable है:

function __construct() { 
    parent::__construct(); 
} 

अब जब आप का नाम बदलने के वर्ग एक, आप डॉन अपने बच्चों में माता-पिता कॉल को बदलने के लिए याद रखना होगा। अनुमोदित, अभी भी आपके कोड में करने के लिए नामकरण कर रहा है लेकिन कम से कम यह उनमें से एक नहीं है।

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