मैं ऑब्जेक्ट की विधि के अंदर किसी दिए गए तर्क से कोई संपत्ति कैसे बना सकता हूं?गतिशील रूप से नई संपत्ति कैसे बनाएं
class Foo{
public function createProperty($var_name, $val){
// here how can I create a property named "$var_name"
// that takes $val as value?
}
}
और मैं की तरह संपत्ति उपयोग करने में सक्षम होना चाहता हूँ:
$object = new Foo();
$object->createProperty('hello', 'Hiiiiiiiiiiiiiiii');
echo $object->hello;
यह भी है कि मैं संपत्ति सार्वजनिक संरक्षित/निजी बना सकता है/हो सकता है? मुझे पता है कि इस मामले में यह सार्वजनिक किया जाना चाहिए, लेकिन मैं संरक्षित गुण और सामान :)
पाने के लिए कुछ magik तरीकों जोड़ सकते हैं मुझे लगता है कि मैं एक समाधान मिला:
protected $user_properties = array();
public function createProperty($var_name, $val){
$this->user_properties[$var_name] = $val;
}
public function __get($name){
if(isset($this->user_properties[$name])
return $this->user_properties[$name];
}
आप करते हैं लगता है कि यह एक अच्छा विचार है?
धन्यवाद। हालांकि मुझे कक्षा के अंदर इसकी ज़रूरत है। यह समझाने के लिए जटिल है, गुण वास्तव में वे वस्तुएं हैं जो साइट एक्सटेंशन हैं जो साइट व्यवस्थापक सक्षम/अक्षम कर सकते हैं :) लेकिन मैं अपने समाधान का उपयोग करूंगा, मुझे लगता है कि उन्हें एक सरणी के अंदर रखना बेहतर है। – Alex
क्या उन्हें निजी या संरक्षित के रूप में सेट करना संभव है? –
इस तरह की संपत्ति सेट करने से हमें इसे निजी या संरक्षित करने की अनुमति नहीं मिलती क्योंकि यह सार्वजनिक रूप से सेट की जाती है। हालांकि, आप ओओपी जादू विधियों '__get() 'और' __set() 'के साथ काम करने का प्रयास कर सकते हैं। Http://stackoverflow.com/questions/4713680/php-get-and-set-magic-methods – mauris