जब आप 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::$barstaticBar
आप आमतौर पर संपत्तियों के बजाय तरीकों या यहां तक कि स्वयं वर्ग के लिए देर से स्थैतिक बाइंडिंग का उपयोग करते हैं, क्योंकि आप अक्सर उपवर्गों में गुणों को फिर से परिभाषित नहीं करते हैं; एक staticलेट-बाउंड कंस्ट्रक्टर को आमंत्रित करने के लिए कीवर्ड का उपयोग करने का एक उदाहरण इस संबंधित प्रश्न में पाया जा सकता है: नया स्व बनाम नया स्थिर
हालाँकि, यह staticगुण के साथ भी उपयोग नहीं करता है ।