ভূমিকা
একটি PHP ক্লাসে, static কীওয়ার্ড দিয়ে ডিক্লেয়ার করা প্রপার্টি এবং মেথডগুলো এর অবজেক্ট দ্বারা -> অপারেটর দিয়ে অ্যাক্সেস করা যায় না। বস্তুতঃ, ক্লাসের যেকোনো ইনস্ট্যান্স অ্যাক্সেস করার জন্য অবজেক্ট দরকার নয়। একটি ক্লাসে স্ট্যাটিক আইটেমের ডিফল্ট ভিজিবিলিটি পাবলিক।
স্ট্যাটিক প্রপার্টি
ক্লাসের বাইরে থেকে একটি স্ট্যাটিক প্রপার্টি অ্যাক্সেস করতে, আমাদের স্কোপ রেজোলিউশন অপারেটর (::) ক্লাসের নামের সাথে ব্যবহার করতে হয়। ক্লাসের নাম ইভ্যালুয়েট করা একটি স্ট্রিং ভেরিয়েবলও স্ট্যাটিক প্রপার্টি প্রদান করতে পারে।
<?php class testclass{ static $name="test"; } echo testclass::$name; $var="testclass"; echo $var::$name; ?>একই ক্লাসের যেকোনো মেথডের ভেতরে স্ট্যাটিক প্রপার্টি ব্যবহার করতে, -> অপারেটরের বদলে self কীওয়ার্ড ব্যবহার করুন যা ইনস্ট্যান্স প্রপার্টি অ্যাক্সেস করতে ব্যবহৃত হয়।
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } $obj=new testclass(); $obj->test(); ?>প্যারেন্ট ক্লাসে ডিক্লেয়ার করা যেকোনো স্ট্যাটিক প্রপার্টি চাইল্ড ক্লাস মেথডের ভেতরে রেফার করা যেতে পারে, parent কীওয়ার্ড স্কোপ রেজোলিউশন অপারেটরের সাথে ব্যবহার করে।
<?php class testclass{ static $name="test"; public function test(){ echo self::$name; } } class myclass extends testclass{ public function mytest(){ echo parent::$name; } } $obj=new myclass(); $obj->mytest(); ?>স্ট্যাটিক মেথড
যখন একটি মেথড static হিসেবে ডিক্লেয়ার করা হয়, তখন সুডো-ভেরিয়েবল $this সেটি উপলব্ধ নয়। তাই, ক্লাসের ইনস্ট্যান্স অ্যাট্রিবিউটগুলো সেটিতে অ্যাক্সেস করা যায় না। স্ট্যাটিক মেথডটি ক্লাসের নাম এবং স্কোপ রেজোলিউশন অপারেটর দিয়ে কল করা হয়।
নিচের উদাহরণে, ক্লাসে একটি স্ট্যাটিক প্রপার্টি $count আছে যা কনস্ট্রাক্টর এক্সিকিউট হওয়ার সাথে সাথে ইনক্রিমেন্ট হয় (অর্থাৎ প্রতিটি অবজেক্টের জন্য)। ক্লাসের ভেতরে একটি স্ট্যাটিক ফাংশন আছে যা স্ট্যাটিক প্রপার্টির ভ্যালু রিট্রিভ করে।
উদাহরণ
<?php class testclass{ static $count=0; function __construct(){ self::$count++; } static function showcount(){ echo "count = " . self::$count; } } $a=new testclass(); $b=new testclass(); $c=new testclass(); testclass::showcount(); ?>আউটপুট
এটি নিচের আউটপুট তৈরি করবে:
count = 3