php - नया आत्म बनाम नया स्थिर




static late-static-binding (2)

मैं PHP 5.2 पर काम करने के लिए एक PHP 5.3 लाइब्रेरी को परिवर्तित कर रहा हूं। मेरे रास्ते में खड़ी मुख्य बात देर से स्थैतिक बाध्यकारी का उपयोग है जैसे return new static($options); , अगर मैं इसे return new self($options) करने के लिए परिवर्तित करता हूं तो क्या मुझे वही परिणाम मिलेंगे?

new self और new static बीच क्या अंतर है?


क्या मुझे वही परिणाम मिलेंगे?

ज़रुरी नहीं। मुझे PHP 5.2 के लिए कामकाज की जानकारी नहीं है, हालांकि।

new self और new static बीच क्या अंतर है?

self उसी वर्ग को संदर्भित करता है जिसमें new कीवर्ड वास्तव में लिखा जाता है।

static , PHP 5.3 के देर से स्थिर बाइंडिंग में, पदानुक्रम में जो भी वर्ग आपने विधि को बुलाया है उसे संदर्भित करता है।

निम्नलिखित उदाहरण में, B को A से दोनों विधियों को विरासत में मिला है। self आविष्कार A से जुड़ा हुआ है क्योंकि इसे A के कार्यान्वयन में पहली विधि के रूप में परिभाषित किया गया है, जबकि static वर्ग वर्ग से get_called_class() भी देखें)।

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

यदि यह कोड स्थिर है, तो यह स्थिर नहीं है, तो आप get_class($this) का उपयोग करके 5.2 में कार्य-आसपास प्राप्त कर सकते हैं।

class A {
    public function create1() {
        $class = get_class($this);
        return new $class();
    }
    public function create2() {
        return new static();
    }
}

class B extends A {

}

$b = new B();
var_dump(get_class($b->create1()), get_class($b->create2()));

परिणाम:

string(1) "B"
string(1) "B"




late-static-binding