PHP में new self और new static के बीच क्या अंतर है? लेट स्टैटिक बाइंडिंग
सभी को नमस्ते! मैं PHP में एक अजीब समस्या से तीन दिनों से जूझ रहा हूँ। मेरे पास एक बेस क्लास है जो एक स्टैटिक मेथड के माध्यम से अपने इंस्टेंस बनाता है। जब मैं इस क्लास को इनहेरिट करता हूँ, तो मैं उम्मीद करता हूँ कि चाइल्ड क्लास अपने टाइप के ऑब्जेक्ट बनाएगा, लेकिन किसी कारण से पैरेंट क्लास का ऑब्जेक्ट बनता है।
यहाँ एक सरल उदाहरण है:
```php
class ParentClass {
public static function create() {
return new self();
}
}
class ChildClass extends ParentClass {
// कोई ओवरराइडिंग नहीं
}
$obj = ChildClass::create();
// $obj एक ParentClass है, ChildClass नहीं!
echo get_class($obj); // ParentClass
```
मैंने लेट स्टैटिक बाइंडिंग (Late Static Binding) और `static` कीवर्ड के बारे में पढ़ा है, लेकिन मैं पूरी तरह से नहीं समझ पाया कि यह कैसे काम करता है। क्यों `new self()` हमेशा उस क्लास को संदर्भित करता है जहाँ इसे परिभाषित किया गया है, न कि उस क्लास को जिसे कॉल किया गया है?