मुझे बीए कक्षा में एक स्थिर वर्ग सेट का उपयोग करने में सक्षम होना चाहिए जो बेस क्लास से बेस क्लास को बढ़ाता है।PHP 5.2 में वर्ग विरासत: विस्तार वर्ग में स्थिर चर को ओवरराइड करना?
इस पर विचार करें:
class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
यह पीएचपी 5.3.x में शानदार काम करता है (Dog::get_color()
प्रिंट 'ब्राउन') के बाद से यह देर से स्थिर बाध्यकारी है। लेकिन मेरा उत्पादन सर्वर PHP 5.2.11 चलाता है और इसलिए मुझे अपनी स्क्रिप्ट को अनुकूलित करने की आवश्यकता है।
क्या इस मुद्दे को हल करने के लिए कुछ हद तक कामकाज है?
चीयर्स!
क्रिस्टोफ़र
संपादित करें: लक्ष्य
के रूप में नीचे वर्णित है, यह मैं क्या हासिल करने की कोशिश कर रहा हूँ की एक बहुत सरलीकृत उदाहरण है। यदि मैं आपको दो विकल्पों के साथ प्रदान करता हूं, तो मैंने अपनी समस्या को हल करने के लिए उपयोग किया है (और समस्या स्वयं) किसी के पास मुझसे अलग समाधान हो सकता है ...
मैंने एक बेस डेटाबेस मॉडल बनाया है जिसमें "ढूंढें" , "find_by" और "find_all" (सभी स्थिर)।
PHP 5.3 में get_called_class()
नामक एक फ़ंक्शन है जिसका उपयोग मैं वर्तमान में कक्षा के नाम को निर्धारित करने के लिए उपयोग करता हूं, और उसके बाद सही डेटाबेस तालिका के विरुद्ध मानचित्र बनाने के लिए इसका उपयोग करता हूं। पूर्व श्रेणी User
users
पर इंगित करेगी।
get_called_class()
PHP 5.2.x में मौजूद नहीं है और मैंने पाया हैक कार्यान्वयन बहुत अविश्वसनीय हैं। फिर मैं कक्षा मॉडल वाले सभी मॉडल वर्गों में स्थिर चर का उपयोग करने के इस विकल्प को बदल गया।
मुझे लगता है '' Dog' Animal' का विस्तार करना चाहिए? –
आप बिल्कुल सही हैं :) – Christoffer
आगे बताते हुए, मुझे लगता है कि आपको पंक्ति वर्ग पर स्टेटिक्स की बजाय टेबल क्लास पर विधियों के रूप में कार्यों को ढूंढना/ढूंढना चाहिए (जो आपको लगता है कि आप – gnarf