जब आप self
एक वर्ग के सदस्य को संदर्भित करने के लिए उपयोग करते हैं, तो आप उस वर्ग का उल्लेख कर रहे हैं जिसके भीतर आप कीवर्ड का उपयोग करते हैं। इस स्थिति में, आपकी Foo
कक्षा एक संरक्षित स्थैतिक संपत्ति कहलाती है $bar
। जब आप संपत्ति का उल्लेख करने के self
लिए Foo
कक्षा में उपयोग करते हैं, तो आप उसी वर्ग को संदर्भित कर रहे हैं।
इसलिए यदि आपने self::$bar
अपनी Foo
कक्षा में कहीं और उपयोग करने की कोशिश की है, लेकिन आपके पास Bar
संपत्ति के लिए एक अलग मूल्य के साथ एक वर्ग है, तो Foo::$bar
इसके बजाय इसका उपयोग किया जाएगा Bar::$bar
, जो कि आप जो चाहते हैं वह नहीं हो सकता है:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
जब आप किसी विधि को कॉलstatic
करते हैं, तो आप लेट स्टैटिक बाइंडिंग (PHP 5.3 में प्रस्तुत) नामक एक सुविधा का आह्वान करते हैं ।
उपरोक्त परिदृश्य में, उपयोग करने के self
परिणामस्वरूप Foo::$bar
(1234) होगा। और (4321) का उपयोग करने के static
परिणामस्वरूप , दुभाषिया रनटाइम के दौरान वर्ग के भीतर पुनर्वितरण को ध्यान में रखता है।Bar::$bar
static
Bar
आप आमतौर पर संपत्तियों के बजाय तरीकों या यहां तक कि स्वयं वर्ग के लिए देर से स्थैतिक बाइंडिंग का उपयोग करते हैं, क्योंकि आप अक्सर उपवर्गों में गुणों को फिर से परिभाषित नहीं करते हैं; एक static
लेट-बाउंड कंस्ट्रक्टर को आमंत्रित करने के लिए कीवर्ड का उपयोग करने का एक उदाहरण इस संबंधित प्रश्न में पाया जा सकता है: नया स्व बनाम नया स्थिर
हालाँकि, यह static
गुण के साथ भी उपयोग नहीं करता है ।