আপনি যখন 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
, আপনি দেরী স্ট্যাটিক বাইন্ডিংস (পিএইচপি 5.3 তে প্রবর্তিত) নামক কোনও বৈশিষ্ট্যটি আহ্বান করছেন ।
উপরের দৃশ্যে, ব্যবহারের self
ফলাফল হবে Foo::$bar
(1234)। এবং ব্যবহারের static
ফলে Bar::$bar
(4321) ফলাফল আসবে কারণ এর সাথে static
, দোভাষী দের Bar
সময়কালীন ক্লাসের মধ্যে পুনঃনির্ধারণ বিবেচনা করে ।
আপনি প্রায়শই সাবক্লাসে বৈশিষ্ট্য পুনর্বিবেচনা করেন না বলে বৈশিষ্ট্যগুলির চেয়ে আপনি সাধারণত পদ্ধতিগুলির জন্য এমনকি ক্লাসের জন্যও দেরী স্ট্যাটিক বাইন্ডিং ব্যবহার করেন; static
দেরীতে আবদ্ধ নির্মাণকারীকে অনুরোধ করার জন্য কীওয়ার্ডটি ব্যবহারের একটি উদাহরণ এই সম্পর্কিত প্রশ্নে পাওয়া যাবে: নতুন স্ব বনাম নতুন স্ট্যাটিক
যাইহোক, এটি static
পাশাপাশি বৈশিষ্ট্যগুলি ব্যবহার করেও বিরত থাকে না ।