में कक्षा को तुरंत चालू करने का सही तरीका मैं कक्षा के अंदर एक विधि बनाने की कोशिश कर रहा हूं, जो वर्तमान में कक्षा में तुरंत चालू हो जाएगा। लेकिन मुझे इस विस्तार से सभी विस्तारित कक्षाओं में सही तरीके से काम करने की आवश्यकता होगी। जैसा कि मैंने this thread से सीखा है, इस कार्य के लिए self
कीवर्ड का उपयोग करना अच्छा नहीं है। तो स्पष्ट विकल्प static
कीवर्ड का उपयोग करेगा।PHP
लेकिन, मैं विभिन्न तरीकों से आया हूं जो काम भी करता है।
उदाहरण:
class SimpleClass
{
private $arg;
public function __construct($arg){
$this->arg = $arg;
}
public function getArg(){return $this->arg;}
public function setArg($arg){$this->arg = $arg;}
public function staticInstance()
{
return new static($this->arg);
}
public function thisInstance()
{
return new $this($this->arg);
}
public function selfInstance()
{
return new self($this->arg);
}
}
class ExtendedClass extends SimpleClass
{
}
$c1 = 'SimpleClass';
$c2 = 'ExtendedClass';
$inst1 = new $c1('simple');
$inst2 = new $c2('extended');
$static_instance_1 = $inst1->staticInstance();
$this_instance_1 = $inst1->thisInstance();
$self_instance_1 = $inst1->selfInstance();
$static_instance_2 = $inst2->staticInstance();
$this_instance_2 = $inst2->thisInstance();
$self_instance_2 = $inst2->selfInstance();
echo "SimpleClass Instances\n";
echo get_class($static_instance_1);
echo get_class($this_instance_1);
echo get_class($self_instance_1);
echo "ExtendedClass Instances\n";
echo get_class($static_instance_2);
echo get_class($this_instance_2);
echo get_class($self_instance_2);
मैं इस उदाहरण से देख सकते हैं, दोनों staticInstance
और thisInstance
उत्पादन "सही" का परिणाम है। या वे करते हैं?
क्या कोई इन दो विधियों के बीच अंतर समझा सकता है और कौन सा "सही" है।
सुनिश्चित नहीं हैं, लेकिन, जब तक कि आप का उपयोग 'new' कोई अंतर नहीं है। 'क्लोन' का उपयोग करते समय और उदाहरण में खुद को संग्रहीत करते समय यह दिलचस्प हो रहा है। – DanFromGermany
स्थैतिक बनाम स्वयं का मेरा ज्ञान ऐसा है कि यदि एक विस्तारित वर्ग के किसी ऑब्जेक्ट उदाहरण से, तो आप एक विधि को कॉल करना चाहते थे जिसे विरासत में मिला था, उदाहरण के लिए, 'नया स्थिर ...' बनायेगा, यह एक विस्तारित वर्ग का नया उदाहरण। अगर उसने 'स्वयं' का उपयोग किया होता, तो यह माता-पिता का एक नया उदाहरण बना देगा (क्योंकि माता-पिता में विधि मौजूद है) – Alex
स्थिर और स्वयं दुविधा के बारे में सबकुछ उस लिंक में समझाया गया है जिसे मैंने अपने प्रश्न के पहले पैराग्राफ में संदर्भित किया था। मेरी दुविधा $ और स्थिर के बीच है :) – AlFra