2009-12-30 10 views

उत्तर

21

यह वही तरीका है, लेकिन मैं उस चर के लिए गेटर और सेटटर लिखने का सुझाव दूंगा।

class Testclass 

{ 
    private $testvar = "default value"; 

    public function setTestvar($testvar) { 
     $this->testvar = $testvar; 
    } 
    public function getTestvar() { 
     return $this->testvar; 
    } 

    function dosomething() 
    { 
     echo $this->getTestvar(); 
    } 
} 

$Testclass = new Testclass(); 

$Testclass->setTestvar("another value"); 

$Testclass->dosomething(); 
+4

सेटर और गेटर के साथ बदल दिया है, आपको $ testvar को निजी पर सेट करना चाहिए :) – nXqd

+0

ओह हाँ, यह अधिक उपयुक्त होगा। इंगित करने के लिए धन्यवाद। – marvin

+1

आप इसका सुझाव क्यों देते हैं? क्या यह अब पुराना है या अभी भी एक अच्छी विधि है? – tehlivi

0

है class Testclass के अंदर:

public function __construct($new_value) 
{ 
    $this->testvar = $new_value; 
} 
0

आपको लगता है कि चर/विशेषता के मान "सेटिंग" कर रहे हैं। ओवरराइडिंग या ओवरलोडिंग नहीं। आपका कोड बहुत ही सामान्य और सामान्य है।

इन सभी शर्तों ("सेट", "ओवरराइड", "ओवरलोड") के विशिष्ट अर्थ हैं। ओवरराइड और ओवरलोड पॉलीमोर्फिज्म (सबक्लासिंग) के बारे में हैं।

http://en.wikipedia.org/wiki/Object-oriented_programming से:

बहुरूपता प्रोग्रामर सिर्फ अपने माता पिता के वर्ग 'के सदस्यों की तरह व्युत्पन्न वर्ग के सदस्यों के इलाज के लिए अनुमति देता है। अधिक सटीक, ऑब्जेक्ट उन्मुख प्रोग्रामिंग में पॉलीमोर्फिज्म एक ही नाम के तरीकों की विधि कॉल का जवाब देने के लिए अलग-अलग डेटा प्रकारों से संबंधित वस्तुओं की क्षमता है, प्रत्येक एक उपयुक्त प्रकार-विशिष्ट व्यवहार के अनुसार। एक विधि, या ऑपरेटर जैसे +, -, या *, को कई अलग-अलग स्थितियों में संक्षेप में लागू किया जा सकता है। अगर किसी कुत्ते को बोलने का आदेश दिया जाता है(), यह छाल() को प्राप्त कर सकता है। हालांकि, अगर एक सुअर को बोलने का आदेश दिया जाता है(), यह एक ओंक() को प्राप्त कर सकता है। वे दोनों पशु से बोलते हैं(), लेकिन उनके व्युत्पन्न वर्ग विधियों पैरेंट वर्ग के तरीकों को ओवरराइड करते हैं; यह पॉलिमॉर्फिज्म ओवरराइडिंग है। कार्यान्वयन के आधार पर कई अलग-अलग कार्यों को करने के लिए पॉलिमॉर्फिज्म ओवरलोडिंग एक विधि हस्ताक्षर का उपयोग होता है, या "ऑपरेटर" जैसे एक ऑपरेटर का उपयोग होता है। "+" ऑपरेटर, उदाहरण के लिए, पूर्णांक अतिरिक्त, फ्लोट जोड़, सूची concatenation, या स्ट्रिंग concatenation प्रदर्शन करने के लिए इस्तेमाल किया जा सकता है। संख्या के किसी भी दो उप-वर्ग, जैसे कि इंटेगर और डबल, को ओओपी भाषा में ठीक से जोड़ने की उम्मीद है। इस प्रकार काम करने के लिए भाषा को अतिरिक्त ऑपरेटर, "+" अधिभारित करना चाहिए। यह कोड पठनीयता में सुधार करने में मदद करता है। यह कैसे कार्यान्वित किया जाता है भाषा से भाषा में भिन्न होता है, लेकिन अधिकांश ओओपी भाषा कम से कम कुछ स्तर ओवरलोडिंग पॉलीमोर्फिज्म का समर्थन करती है।

+0

हाँ ... सिर्फ गलत अवधि – Cudos

+0

अधिभार उपयोग कर रहा था और ओवरराइड और सेट सभी विशिष्ट अर्थ है। क्या आपको एक उत्तर मिला जो आप अपने कोड के बारे में खोज रहे थे? या आप विशेष रूप से ओवरलोडिंग के बारे में जानकारी चाहते हैं? –

+0

बस प्रश्न के लिए अपना अंतिम संपादन देखा। आप इसे सही कर रहे हैं। जैसा कि अन्य ने कहा है, यदि आप चाहें तो आप प्राप्त करें और सेट विधियों का उपयोग कर सकते हैं, लेकिन आपको यह नहीं करना है। उनके पास फायदे हैं, खासकर यदि आपको यह सत्यापित करने की आवश्यकता है कि डेटा सेट करने से पहले एक निश्चित प्रकार का है। –

0

अधिक भार आप एक उपवर्ग आवश्यकता होगी के लिए:

class ChildTestclass extends Testclass { 
    public $testvar = "newVal"; 
} 

$obj = new ChildTestclass(); 
$obj->dosomething(); 

इस कोड newVal गूंज होगा।

0

अपनी कक्षा में गेटर और सेटटर विधि जोड़ें।

public function setValue($new_value) 
{ 
    $this->testvar = $new_value; 
} 

public function getValue() 
{ 
    return $this->testvar;   
} 
2

कन्स्ट्रक्टर का उपयोग करें।

<?php 
class TestClass 
{ 
    public $testVar = "default value"; 
    public function __construct($varValue) 
    { 
     $this->testVar = $varValue;    
    } 
}  
$object = new TestClass('another value'); 
print $object->testVar; 
?> 
+0

आपके कोड को कोई समझ नहीं आता है, यह – Greg

+2

कुछ भी आउटपुट नहीं करेगा, मैंने testvar को testVar –

0

आप उदाहरण दिया (गेटर/सेटर का उपयोग कर या निर्माता में स्थापित) निजी के लिए इसे बदल जाएं, क्योंकि वे क्या चर में सेट किया गया है को नियंत्रित करने के तरीके हैं पालन करने के लिए जा रहे हैं।

कक्षा में जोड़े गए सभी चीजों के साथ संपत्ति को सार्वजनिक रखने के लिए यह समझ में नहीं आता है।

4
class Testclass 
{ 
    public $testvar; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); ////It will print "another value"