मेरी राय में वस्तुओं को मूल्य वस्तुओं के लिए अपरिवर्तनीय होना चाहिए। इसके अलावा जब तक आप अपने ऑब्जेक्ट को अपने पूरे एप्लिकेशन में साझा नहीं कर लेते हैं, तब तक इसका अधिक लाभ नहीं होता है।
यहां कुछ गलत जवाब हैं, एक अपरिवर्तनीय वस्तु में सेटर्स हो सकते हैं। PHP में अपरिवर्तनीय वस्तुओं के कुछ कार्यान्वयन यहां दिए गए हैं।
उदाहरण # 1।
class ImmutableValueObject
{
private $val1;
private $val2;
public function __construct($val1, $val2)
{
$this->val1 = $val1;
$this->val2 = $val2;
}
public function getVal1()
{
return $this->val1;
}
public function getVal2()
{
return $this->val2;
}
}
जैसा कि आप तुरंत देख सकते हैं कि आप किसी भी मूल्य को बदल नहीं सकते हैं।
उदाहरण 2: setters
साथ:
class ImmutableValueObject
{
private $val1;
private $val2;
public function __construct($val1, $val2)
{
$this->val1 = $val1;
$this->val2 = $val2;
}
public function getVal1()
{
return $this->val1;
}
public function withVal1($val1)
{
$copy = clone $this;
$copy->val1 = $val1;
return $copy; // here's the trick: you return a new instance!
}
public function getVal2()
{
return $this->val2;
}
public function withVal2($val2)
{
$copy = clone $this;
$copy->val2 = $val2;
return $copy;
}
}
वहाँ कई कार्यान्वयन संभव है और यह कोई एक विशेष सूची भी तरह से है। और याद रखें कि प्रतिबिंब के साथ हमेशा PHP में घूमने का एक तरीका होता है, इसलिए अंत में अपरिवर्तनीयता आपके सिर में होती है!
अपरिवर्तनीय वस्तुओं को अंतिम रूप में रखना अक्सर अच्छा अभ्यास होता है।
संपादित करें:
- withX
- के लिए setX बदल के बारे में अंतिम
स्रोत
2015-11-25 02:52:00
टिप्पणी जोड़ी आप वर्गों है कि ऐसा करने के लिए होने में कोई लाभ देख सकते हैं? मैं शायद एक बेहतर दृष्टिकोण मानता हूं कि * स्थायित्व * (हाँ मैंने इसे बनाया है) उन संपत्तियों से इनकार करना होगा जिन्हें आप बदलना नहीं चाहते हैं, यदि आवश्यक हो तो उन्हें एक नया उदाहरण बनाने के लिए मजबूर करना होगा। संपादित करें: हाँ, क्या ThiefMaster ने कहा :) –
http: // stackoverflow।कॉम/प्रश्न/7317037/php-immutable-public-member-field यह उदाहरण आपको –