मुझे एक अपरिवर्तनीय कक्षा बनाने की आवश्यकता है जो कि केवल एक सदस्य फ़ील्ड कंटेनर है। मैं चाहता हूं कि इसके क्षेत्र अपने कन्स्ट्रक्टर में एक बार तत्काल हो जाएं (मान को कन्स्ट्रक्टर के पैरामीटर के रूप में दिया जाना चाहिए)। मैं चाहता हूं कि खेतों में सार्वजनिक हो लेकिन अपरिवर्तनीय हो। मैं प्रत्येक फ़ील्ड से पहले final
कीवर्ड का उपयोग कर जावा के साथ ऐसा कर सकता था। यह PHP में कैसे किया जाता है?PHP: अपरिवर्तनीय सार्वजनिक सदस्य फ़ील्ड
10
A
उत्तर
16
के dinamyc गिनती आप __set
और __get
जादू तरीकों का उपयोग और के रूप में है कि संपत्ति की घोषणा करनी चाहिए संरक्षित या निजी:
class Example
{
private $value;
public function __construct()
{
$this->value = "test";
}
public function __get($key)
{
if (property_exists($this, $key)) {
return $this->{$key};
} else {
return null; // or throw an exception
}
}
public function __set($key, $value)
{
return; // or throw an exception
}
}
उपयोग:
$example = new Example();
var_dump($example->value);
$example->value = "invalid";
var_dump($example->value);
आउटपुट:
string(4) "test"
string(4) "test"
2
आप __set()
जादू विधि का उपयोग कर सकते हैं और कोई अपवाद फेंक सकता है जब कोई व्यक्ति सीधे संपत्ति सेट करने का प्रयास करता है।
class ClassName {
public function __set($key, $value) {
throw new Exception('Can't modify property directly.');
}
}
हालांकि, यह संपत्तियों में संशोधन को रोक देगा चाहे वे सार्वजनिक हों या नहीं।
2
ताकि आप बेहतर कर सकते हैं - अगर आप क्षेत्रों
class ClassName {
private $fields = array();
// use class : $cl = new ClassName(array('f'=>2,'field_4'=>5,''12));
// echo $cl->field_4; echo $cl->f;
public function __construct($data= array())
{
if (!is_array($data) || !count($data)) throw new Exception('Not enough args')
foreach ($data as $key=>$val)
{
if (is_numeric($key))
$this->fields['field_'.$key] = $val;
else
$this->fields[$key] = $val;
}
}
/* in this case you can use this class like $cl = new ClassName(12,14,13,15,12); echo $cl->field_1;
public function __construct()
{
$ata = funcs_get_args();
if (!count($data)) throw new Exception('Not enough args')
foreach ($data as $key=>$val)
{
if (is_numeric($key))
$this->fields['field_'.$key] = $val;
else
$this->fields[$key] = $val;
}
}
*/
public function __get($var) {
if (isset($this->fields[$var]))
return $this->fields[$var];
return false;
//or throw new Exception ('Undeclared property');
}
}
+4
'__set' के साथ काम नहीं करता है – sanmai
संबंधित मुद्दे
- 1. एक्सेसर्स बनाम सार्वजनिक सदस्य
- 2. PHP में अपरिवर्तनीय वस्तुएं?
- 3. सी #, अपरिवर्तनीयता और सार्वजनिक पाठक फ़ील्ड
- 4. सी # इंटरफेस के लिए गैर सार्वजनिक सदस्य
- 5. सदस्य फ़ील्ड, निर्माण का आदेश
- 6. अपरिवर्तनीय वर्ग बनाम अपरिवर्तनीय संरचना
- 7. क्यों जुनीट में @ रूल एनोटेटेड फ़ील्ड सार्वजनिक होना चाहिए?
- 8. प्रोग्रामिंग शब्द - फ़ील्ड, सदस्य, गुण (सी #)
- 9. PHP json_encode क्लास निजी सदस्य
- 10. स्केल अपरिवर्तनीय वस्तुओं और वैल फ़ील्ड के साथ लक्षण
- 11. सी # सार्वजनिक सदस्य को ओवरराइड करें और इसे निजी बनाएं
- 12. गैर-साझा सदस्य के संदर्भ में सार्वजनिक उप
- 13. कॉन्स संदर्भ सार्वजनिक सदस्य - यह क्यों काम करता है?
- 14. PHP कक्षाएं सार्वजनिक कीवर्ड का उपयोग क्यों करती हैं?
- 15. PHP कक्षा Constants - सार्वजनिक, निजी या संरक्षित?
- 16. "सार्वजनिक स्थैतिक" या "स्थिर सार्वजनिक"?
- 17. सीरियलाइजिंग और अपरिवर्तनीय वस्तुओं
- 18. विधि कॉलिंग सार्वजनिक/निजी सदस्य या तरीके सर्वश्रेष्ठ अभ्यास - सी # .NET
- 19. PHP फ़ील्ड द्वारा क्रमबद्ध सरणी?
- 20. टाइप। गेटफिल्ड्स() - केवल "सार्वजनिक कॉन्स" फ़ील्ड लौट रहे हैं
- 21. अपरिवर्तनीय वस्तुओं
- 22. पूर्णांक अपरिवर्तनीय
- 23. अपरिवर्तनीय ऑब्जेक्ट
- 24. + = अपरिवर्तनीय सेट
- 25. PHP डोमेलेमेंट अपरिवर्तनीय है। = 'कोई संशोधन अनुमत त्रुटि'
- 26. जो अनुशंसित है: "स्थैतिक सार्वजनिक" या "सार्वजनिक स्थैतिक"
- 27. सी # सबक्लास में सदस्य चर (फ़ील्ड) को छुपाएं, छुपाएं कैसे?
- 28. सार्वजनिक
- 29. सदस्य समारोह
- 30. बाहरी असेंबली में structs के सार्वजनिक पाठक सदस्यों तक पहुंच
यह PHP में संभव नहीं है। – Sjoerd
फ़ील्ड सार्वजनिक क्यों होनी चाहिए? – Pete171
@ pete171 शायद इसलिए वे केवल पढ़ने के लिए – fbstj