2013-07-23 5 views
14

PHP में अभिभावक वर्ग से विरासत में प्राप्त होने पर, विशेष रूप से कोडिनेटर में parent::__construct or parent::model() क्या करता है?PHP कोडिनेटर - पैरेंट :: __ निर्माण

यदि मैं __construct पैरेंट क्लास नहीं करता तो इससे कैसे अंतर आएगा? और, किस तरह से सुझाव दिया जाता है?

-Added-

फोकस अलग अलग तरीकों से संस्करणों के आधार पर है और यह भी अगर इस मामले में छोड़े गए किया जा सकता है Codeigniter स्वचालित रूप से इस करना होगा में parent::__construct के लिए एक कॉल के बारे में Codeigniter विशिष्ट के बारे में अधिक है।

+3

'रचनाकार' के बारे में जानें। –

+0

अभिभावक :: __ निर्माण() सबक्लास निर्माता [डॉक्टर] (http://php.net/manual/fr/language.oop5.decon.php) – Bora

+0

अच्छी तरह से, मुझे पता है कि रचनाकार क्या करते हैं। वे उन जादू विधियों में से एक हैं जो कक्षा शुरू होने पर स्वचालित रूप से चलेंगे, लेकिन जो मैं पूछ रहा हूं वह अंतर है यदि मैं इसे घोषित नहीं करता क्योंकि परिणाम विशेष रूप से कोडिनेटर के साथ बहुत अलग नहीं लगता है। –

उत्तर

60

यह एक सामान्य श्रेणी का निर्माता है। के निम्न उदाहरण पर नजर डालते हैं:

class A { 
    protected $some_var; 

    function __construct() { 
     $this->some_var = 'value added in class A'; 
    } 

    function echo_some_var() { 
     echo $this->some_var; 
    } 
} 

class B extends A { 
    function __construct() { 
     $this->some_var = 'value added in class B'; 
    } 
} 

$a = new A; 
$a->echo_some_var(); // will print out 'value added in class A' 
$b = new B; 
$b->echo_some_var(); // will print out 'value added in class B' 

जैसा कि आप देख, वर्ग बी ए से सभी मूल्यों और कार्यों तो वर्ग के सदस्य $some_var एक से और साथ ही बी से पहुँचा जा सकता है विरासत क्योंकि हम एक निर्माता जोड़ दिया है वर्ग बी में, वर्ग एक के निर्माता नहीं है जब आप कक्षा बी की एक नई वस्तु बना रहे हैं इस्तेमाल किया जाएगा

अब निम्नलिखित उदाहरणों पर गौर:

class C extends A { 
    // empty 
} 
$c = new C; 
$c->echo_some_var(); // will print out 'value added in class A' 

आप देख सकते हैं, क्योंकि हमारे पास एक कन्स्ट्रक्टर घोषित नहीं किया, सी के निर्माता लस ए का उपयोग पूरी तरह से किया जाता है। लेकिन हम निम्नलिखित है, जो क्लास सी के बराबर है भी कर सकते हैं:

class D extends A { 
    function __construct() { 
     parent::__construct(); 
    } 
} 
$d = new D; 
$d->echo_some_var(); // will print out 'value added in class A' 

तो तुम केवल जब आप कुछ करने के लिए बच्चे को कक्षा में एक निर्माता चाहते लाइन parent::__construct(); उपयोग करते हैं, और माता पिता के निर्माता पर अमल करने की है। उदाहरण दिया:

class E extends A { 
    private $some_other_var; 

    function __construct() { 
     // first do something important 
     $this->some_other_var = 'some other value'; 

     // then execute the parent constructor anyway 
     parent::__construct(); 
    } 
} 

अधिक जानकारी यहां पाया जा सकता है: http://php.net/manual/en/language.oop5.php

+2

@webber .. आपके संपादन को अस्वीकार करने के लिए खेद है। यह वास्तव में सही था, इसलिए मैंने इसे धक्का दिया है। 'निजी' बग पर अच्छा पकड़ो – arserbin3

0

क्या माता पिता :: __ निर्माण या माता-पिता :: मॉडल() क्या करता है?

इन कार्यों बिल्कुल वैसा ही है, केवल निर्माण कक्षा के बाद ही PHP5 करने से पहले नाम दिया जा करने के लिए इस्तेमाल समारोह है। मैं आपके उदाहरण में कहता हूं कि आप मॉडल क्लास (और सीआई के कुछ पुराने संस्करण पर विस्तार कर रहे हैं क्योंकि आपको सीआई_मोडेल का उपयोग करने की आवश्यकता नहीं है), यदि मैं इस __construct में सही हूं तो मॉडल() के समान है।