পরিচিতি
PHP-তে, class কীওয়ার্ড দিয়ে ইউজার-ডিফাইনড কমপাউন্ড ডেটা টাইপ তৈরি করা যায়। ক্লাসের একটি নতুন ইনস্ট্যান্স হলো অবজেক্ট। অবজেক্টের ক্যারেক্টারিস্টিক ক্লাস ডেফিনিশন অনুযায়ী, যাতে প্রোপার্টি, কনস্ট্যান্ট এবং মেথড মেম্বার থাকতে পারে।
এক ক্লাস মেম্বারের অ্যাক্সেসিবিলিটিকে (visibility) এর ডেফিনিশনে लगे ভিজিবিলিটি প্রিফিক্স কীওয়ার্ড নির্ধারণ করে। PHP-তে তিনটি ভিজিবিলিটি কীওয়ার্ড রয়েছে—public, private এবং protected। public কীওয়ার্ড দিয়ে ডিক্লেয়ার করা ক্লাস মেম্বার যেখান থেকু অ্যাক্সেসIBLE। protected মেম্বার তার ক্লাস থেকে এবং ইনহেরিটিং ক্লাস থেকে অ্যাক্সেসIBLE। অন্যদিকে, private মেম্বার শুধু সেটি যেখানে ডিফাইন করা হয়েছে সেই ক্লাস থেকে অ্যাক্সেসIBLE, বাইরের যেকোনো জিনিসের কাছে ভিজিবল নয়।
প্রোপার্টি ভিজিবিলিটি (Property Visibility)
এক প্রোপার্টি হলো ক্লাস ইনস্ট্যান্সের একটি অ্যাট্রিবিউট। এটি হতে পারে ইনস্ট্যান্স প্রোপার্টি (প্রতিটি অবজেক্টের জন্য ভিন্ন ভ্যালু) বা ক্লাস প্রোপার্টি (প্রতিটি অবজেক্টের জন্য একই ভ্যালু)। প্রোপার্টি যেকোনো বৈধ PHP ডেটা টাইপের হতে পারে। প্রোপার্টি ডিফল্টভাবে public ভিজিবিলিটি পায়। যদি প্রোপার্টি var কীওয়ার্ড দিয়ে ডিফাইন করা হয় (যেটি এখন ডিপ্রিকেটেড), তবে সেটি public হিসেবে বিবেচিত হয়।
উদাহরণ
<?php
class myclass{
public $fname="Ajay";
var $lname; // public হিসেবে বিবেচিত
private $marks=100;
protected $age=20;
}
$obj=new myclass();
echo "$obj->fname\n";
$obj->lname="Diwan";
echo "$obj->marks\n";
$obj->age=21;
?>
আউটপুট
নিচের আউটপুট দেখাচ্ছে যে পাবলিক প্রোপার্টি বাইরে থেকে অ্যাক্সেসIBLE, কিন্তু প্রাইভেট এবং প্রোটেক্টেড প্রোপার্টি আনক্যাচড এরর থ্রো করে—
Ajay PHP Fatal error: Uncaught Error: Cannot access private property myclass::$marks PHP Fatal error: Uncaught Error: Cannot access protected property myclass::$age
তবে, প্রাইভেট এবং প্রোটেক্টেড প্রোপার্টি একই ক্লাসের ফাংশন ভেতরে ব্যবহার করা যায়—
উদাহরণ
<?php
class myclass{
public $fname="Ajay";
var $lname;
private $marks=100;
protected $age=20;
function displaydata(){
$this->lname="Diwan";
echo "$this->fname $this->lname\n";
echo "marks=$this->marks age=$this->age";
}
}
$obj=new myclass();
$obj->displaydata();
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
Ajay Diwan marks=100 age=20
মেথড ভিজিবিলিটি (Method Visibility)
ক্লাস প্রোপার্টির মতোই ক্লাস মেথডও public, private এবং protected কীওয়ার্ড দিয়ে ভিজিবিলিটি অ্যাসাইন করা যায়। মেথডগুলোর ডিফল্ট ভিজিবিলিটি public।
উদাহরণ
<?php
class myclass{
public $fname="Ajay";
var $lname;
private $marks=100;
protected $age=20;
public function setname(){
$this->fname="Anil";
$this->lname="Dave";
echo "name changed\n";
}
private function setmarks(){
$this->marks=90;
}
protected function setage(){
$this->age=21;
}
function setdata(){
$this->setname();
$this->setmarks();
$this->setage();
}
function displaydata(){
$this->lname="Diwan";
echo "$this->fname $this->lname\n";
echo "marks=$this->marks age=$this->age";
}
}
$obj=new myclass();
$obj->setname(); // কাজ করবে
$obj->setmarks(); // এরর
$obj->setage(); // এরর
$obj->setdata(); // প্রাইভেট ও প্রোটেক্টেড মেথড পাবলিক মেথড থেকে কল
$obj->displaydata();
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
name changed PHP Fatal error: Uncaught Error: Call to private method myclass::setmarks() from context '' PHP Fatal error: Uncaught Error: Call to protected method myclass::setage() from context '' Anil Dave marks=90 age=21
ইনহেরিটেন্সে মেথড ভিজিবিলিটি (Method Visibility in Inheritance)
পেরেন্ট (Parent) ক্লাসের মেথড চাইল্ড (Child) ক্লাস ডেফিনিশনে ওভাররাইড করা যায়। পেরেন্টের প্রাইভেট এবং প্রোটেক্টেড মেথড চাইল্ড ক্লাসের অবজেক্টের জন্য উপলব্ধ নয়। তবে, পেরেন্টে প্রোটেক্টেড মেথড চাইল্ড ক্লাসের মেথডে ব্যবহার করা যায়।
উদাহরণ
<?php
class testclass{
public $x=10;
private $y=20;
protected $z=30;
private function test(){
echo "testclass private method\n";
}
public function test1(){
echo "testclass public method\n";
}
protected function test2(){
echo "testclass protected method\n";
}
function test3(){
echo "x=$this->x y=$this->y z=$this->z\n";
}
}
class newclass extends testclass{
function test1(){
echo "newclass public method\n";
}
public function test4(){
$this->test();
$this->test1();
$this->test2();
}
}
$obj=new newclass();
echo $obj->test1();
echo $obj->test3();
echo $obj->test4();
?>
আউটপুট
এটি নিচের ফলাফল দেখাবে—
newclass public method x=10 y=20 z=30 PHP Fatal error: Uncaught Error: Call to private method testclass::test() from context 'newclass'
কনস্ট্যান্ট ভিজিবিলিটি (Constant Visibility)
PHP 7.1 থেকে, কনস্ট্যান্টের সাথে ভিজিবিলিটি মোড ব্যবহার করা যায়। কনস্ট্যান্টের ডিফল্ট ভিজিবিলিটি public।
উদাহরণ
<?php
class testclass{
public const X=10;
private const Y=20;
protected const Z=30;
function showconst(){
echo "x=" . self::X ;
echo "y=" . self::Y;
echo "z=" . self::Z ;
}
}
$obj=new testclass();
$obj->showconst();
echo testclass::Y . "\n";
echo testclass::Z . "\n";
?>
আউটপুট
এটি নিচের ফলাফল দেখাবে—
x=10y=20z=30 PHP Fatal error: Uncaught Error: Cannot access private const testclass::Y PHP Fatal error: Uncaught Error: Cannot access protected const testclass::Z