2011-03-04 11 views
6
class User{ 
    public $company_name; 
} 

class Employer extends User{ 
    public $fname; 
    public $sname; 
} 

यह मैंने test.php बनाया है। मैंने कक्षा फ़ाइल शामिल की है।शुरुआती के लिए PHP कक्षा विरासत

$employer = new Employer(); 
$user = new User(); 
$employer->company_name = "Company name is "; 
echo $user->company_name; 

जब मैं नाम मुद्रित करता हूं तो कुछ भी नहीं होता है, कृपया मुझे बताएं कि मेरे कोड में क्या गलत है।

+1

आपको सबकुछ ठीक मिला, बस गलत मान प्रिंट कर रहे हैं, मुझे लगता है। – Orbit

+1

कृपया एक और वर्णनात्मक विषय का उपयोग करें। – Andrew

+4

लोगों को बताना बंद करो कि वे गलत हैं। आप polymorphism की अपनी समझ में गलत हैं। नीचे दिए गए सभी उत्तर सही हैं। पढ़ें: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming या ओओपी पर एक परिचय पुस्तक खोजें। और अगर आप उन्हें सुनने या समझने के इच्छुक नहीं हैं तो उत्तर की तलाश में आओ। –

उत्तर

14

आपका Employer वर्ग अपने User वर्ग फैली लेकिन जब आप अपने $user और $employer वस्तुओं को बनाने के वे अलग संस्थाओं और संबंधित नहीं हैं।

इस तरह से अपनी वस्तुओं की तरह देखें:

$employer = new Employer(); 
// You now have $employer object with the following properties: 
// $employer->company_name; 
// $employer->fname; 
// $employer->sname; 

$user = new User(); 
// You now have $user object with the following properties: 
// $user->company_name; 

$employer->company_name = "Company name is "; 
// You now have $employer object with the following properties: 
// $employer->company_name = 'Company name is '; 
// $employer->fname; 
// $employer->sname; 

echo $user->company_name; 
// You currently have $user object with the following properties: 
// $user->company_name; /* no value to echo! */ 

आप विरासत में मिला गुणों का उपयोग करना चाहते हैं, इसे और अधिक इस तरह काम करता है:

class User{ 
    public $company_name; 

    function PrintCompanyName(){ 
     echo 'My company name is ' . $this->company_name; 
    } 
} 

class Employer extends User{ 
    public $fname; 
    public $sname; 
} 

$employer = new Employer(); 
$employer->company_name = 'Rasta Pasta'; 
$employer->PrintCompanyName(); //echoes 'My company name is Rasta Pasta.' 
+0

PHP में दो अलग-अलग वर्ग अलग-अलग इकाइयों का अर्थ है, भले ही आप सुपर क्लास के रूप में सुपर और अन्य वर्ग के रूप में कॉल करें। –

+0

महान व्याख्या। ओपी स्पष्ट रूप से अपने सिर में है कि वह सही है। –

+0

@ user630320 मैं देख सकता हूं कि आप इसे गलत क्यों समझ रहे हैं, लेकिन कृपया सुनिश्चित करें कि आप हैं। आपका भ्रम विभिन्न प्रकार की 2 अलग-अलग वस्तुओं को बनाने में निहित है। जिस तरह से आपने अपना कोड लिखा है, '$ नियोक्ता' वर्ग 'नियोक्ता' का है जो वर्ग 'उपयोगकर्ता' को प्राप्त करता है। हालांकि, '$ उपयोगकर्ता' वर्ग' $ उपयोगकर्ता' है जिसका आपके 'नियोक्ता' ऑब्जेक्ट से बिल्कुल कुछ लेना देना नहीं है। – Farray

2

तुम बस

$employer->company_name; 

या सेट

$user->company_name 

प्रतिध्वनित करने के लिए कुछ मूल्य के लिए है।

आपको बाल वर्ग के साथ काम करने के लिए मूल वर्ग का उदाहरण बनाने की आवश्यकता नहीं है। इस मामले में, $ नियोक्ता को उपयोगकर्ता वर्ग से company_name प्राप्त होता है।

+0

मैं $ नियोक्ता के साथ मान सेट नहीं करना चाहता हूं लेकिन मैं $ उपयोगकर्ता से भी एक्सेस नहीं कर सकता हूं। अब आप जावा की तरह हैं जहां उप वर्ग सुपर क्लास एट्रिब्यूट –

+0

हैलो तक पहुंच सकता है। ऊपर प्रतिक्रिया देखें कि वस्तुएं असंबंधित हैं। – Orbit

3

आपने कभी भी $user->company_name सेट नहीं किया है।

echo $employer->company_name; 
+0

क्योंकि उपयोगकर्ता सुपर क्लास है और नियोक्ता उप वर्ग है जिसका अर्थ है कि यह सुपर क्लास विशेषता का उपयोग कर सकता है। मुझे $ user-> company_name सेट करने की आवश्यकता नहीं है क्योंकि मैंने पहले ही $ नियोक्ता-> company_name सेट कर दिया है। –

+2

यह नहीं है कि यह कैसे काम करता है, PHP संदर्भ वस्तु ऑब्जेक्ट को संदर्भित करता है, ऑब्जेक्ट क्लास स्वयं नहीं। ये दो अलग, असंबंधित उदाहरण हैं। यदि आप कक्षा परिभाषा में एक ठोस नाम निर्धारित करते हैं, तो सभी विरासत वर्गों को डिफ़ॉल्ट रूप से यह होगा। – sunwukung

+0

सभी प्रतिक्रियाओं के लिए धन्यवाद। –

3

आपने ऑब्जेक्ट $ उपयोगकर्ता के $company_name पर कुछ असाइन नहीं किया है; केवल $ नियोक्ता के लिए।

+0

क्योंकि उपयोगकर्ता सुपर क्लास है और नियोक्ता उप वर्ग है जिसका अर्थ है कि यह सुपर क्लास विशेषता का उपयोग कर सकता है। मुझे $ user-> company_name सेट करने की आवश्यकता नहीं है क्योंकि मैंने पहले ही $ नियोक्ता-> company_name सेट कर दिया है। –

4

अपने चर, $user और $employer भ्रमित न हों, कक्षाओं के साथ। $user कक्षा उपयोगकर्ता का एक उदाहरण है, और $employer कक्षा नियोक्ता का एक उदाहरण है, लेकिन वे अलग-अलग चर हैं।

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