आपको खुद से पूछना है: "क्या मैं पर्याप्त दृष्टिकोण के साथ समस्या को लक्षित कर रहा हूं?"
self::
और static::
दो अलग-अलग चीजें करते हैं। उदाहरण के लिए self::
या __CLASS__
वर्तमान वर्ग के संदर्भ हैं, इसलिए कुछ दायरे में परिभाषित यह आगे स्थिर कॉलिंग की आवश्यकता को पूरा नहीं करेगा।
विरासत पर क्या होगा?
class A {
public static function className(){
echo __CLASS__;
}
public static function test(){
self::className();
}
}
class B extends A{
public static function className(){
echo __CLASS__;
}
}
B::test();
यह static::
साथ दूसरी ओर में
A
प्रिंट यह अपेक्षित व्यवहार
class A {
public static function className(){
echo __CLASS__;
}
public static function test(){
static::className();
}
}
class B extends A{
public static function className(){
echo __CLASS__;
}
}
B::test();
है जाएगा यह प्रिंट होगा
B
कहा जाता है कि। यह उस कक्षा को कॉल करने की सीमा को हल करता है जो रनटाइम पर संदर्भित था।
इस बात को ध्यान में रखते हुए मुझे लगता है कि अब आप समस्या को पर्याप्त रूप से देख और हल कर सकते हैं। यदि आप कई स्थिर सदस्यों को विरासत में ले रहे हैं और माता-पिता और बच्चों के सदस्यों की पहुंच की आवश्यकता है self::
पर्याप्त नहीं होगा।
मुझे लगता है कि 'स्थैतिक' पहली जगह गलत दृष्टिकोण है। ऐसा लगता है (और गलत होने पर सही करें) आपने अभी अपना कोड अवांछनीय बना दिया है। – PeeHaa