ভূমিকা
অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং-এ, একটি অ্যাবস্ট্রাক্ট ক্লাস হলো যেটি ইনস্ট্যানশিয়েট করা যায় না, অর্থাৎ slike ক্লাসের অবজেক্ট ডিক্লেয়ার করা সম্ভব নয়। PHP 5.0 সংস্করণ থেকে অ্যাবস্ট্রাক্ট ক্লাসের কনসেপ্ট সাপোর্ট করে।
abstract কিওয়ার্ড দিয়ে ডিফাইন করা ক্লাস একটি অ্যাবস্ট্রাক্ট ক্লাস হয়ে যায়। আরও, যেকোনো ক্লাস যাতে কমপক্ষে একটি অ্যাবস্ট্রাক্ট মেথড থাকে, সেটিও অ্যাবস্ট্রাক্ট মाना হয়।
সিনট্যাক্স
<?php
abstract class testclass{
//
}
?>
যদি আমরা এই ক্লাসের অবজেক্ট তৈরি করার চেষ্টা করি, PHP পার্সার এরর থ্রো করে:
$a=new testclass(); PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass
অ্যাবস্ট্রাক্ট মেথড
অ্যাবস্ট্রাক্ট মেথড শুধু তার সিগনেচার ডিক্লেয়ার করে অর্থাৎ এর ভিজিবিলিটি, আর্গুমেন্ট এবং রিটার্ন টাইপ টাইপ হিন্টসহ, কিন্তু কোনো ফাংশনালিটি থাকে না। এমন একটি অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট करने वाला ক্লাস অবশ্যই সকল অ্যাবস্ট্রাক্ট মেথড ওভাররাইড করবে (ডেফিনিশন দেবে)। চাইল্ড ক্লাসের সংশ্লিষ্ট মেথড প্যারেন্ট ক্লাসের মতো একই সিগনেচার ধারণ করতে হবে। যদি চাইল্ড ক্লাস এই শর্ত পূরণ না করে, PHP পার্সার এক্সেপশন থ্রো করে। একটি অ্যাবস্ট্রাক্ট ক্লাস এক্সটেন্ড করে তৈরি ক্লাসই ইনস্ট্যানশিয়েট করা যায়, তাই সেটাকে কনক্রিট ক্লাস বলা হয়।
নিচের উদাহরণে, প্যারেন্ট ক্লাসে দুটি অ্যাবস্ট্রাক্ট মেথড আছে, 그중 শুধু একটি চাইল্ড ক্লাসে রিডিফাইন করা হয়েছে। এর ফলে এরর হয়:
উদাহরণ
<?php
abstract class testclass{
abstract function test1();
abstract function hello();
}
class myclass extends testclass{
function test1(){
echo "Overrides parent test method";
}
}
$a=new myclass();
?>
আউটপুট
এরর মেসেজ নিচের মতো:
PHP Fatal error: Class myclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testclass::hello)
আর্গুমেন্টসহ অ্যাবস্ট্রাক্ট মেথড
যখন অ্যাবস্ট্রাক্ট মেথড আর্গুমেন্টসহ ডিফাইন করা হয়, তখন সেটি চাইল্ড ক্লাসে একই সংখ্যক আর্গুমেন্ট দিয়ে ওভাররাইড করতে হবে।
নিচের উদাহরণে, প্যারেন্ট ক্লাসের অ্যাবস্ট্রাক্ট মেথডে দুটি আর্গুমেন্ট আছে। চাইল্ড ক্লাসও একই ফাংশন দুটি আর্গুমেন্ট দিয়ে ডিফাইন করেছে:
উদাহরণ
<?php
abstract class testclass{
abstract function hello($name, $age);
}
class myclass extends testclass{
function hello($name, $age){
echo "My name is $name and my age is $age";
}
}
$a=new myclass();
$a->hello("Ravi",20);
?>
আউটপুট
এটি নিচের আউটপুট তৈরি করবে:
My name is Ravi and my age is 20