Abstract Classes and Interfaces

PHP Object-Oriented Programming (OOP) এর মাধ্যমে বড় এবং জটিল প্রজেক্ট সহজভাবে ম্যানেজ করা যায়। যখন আপনার কোডকে আরও বেশি ফ্লেক্সিবল, রিইউজেবল এবং স্ট্রাকচার্ড করতে হয়, তখন Abstract Classes এবং Interfaces খুবই কার্যকরী হয়। আজ আমরা এ দুটি কনসেপ্ট বিস্তারিতভাবে শিখবো।
Abstract Classes (অ্যাবস্ট্রাক্ট ক্লাস)
Abstract Classes হলো এমন ক্লাস যা সরাসরি ইনস্ট্যান্স করা যায় না। অর্থাৎ, আপনি new করে সরাসরি একটি অবজেক্ট তৈরি করতে পারবেন না। এটি মূলত একটি ব্লুপ্রিন্ট হিসেবে কাজ করে, যা অন্যান্য ক্লাসগুলোকে ফলো করতে হয়।
Abstract Class এর মূল বৈশিষ্ট্য:
Abstract ক্লাসে কিছু ফাংশন
abstractহতে পারে, যা চাইল্ড ক্লাসে অবশ্যই ইমপ্লিমেন্ট করতে হবে।Abstract ক্লাসে নরমাল (কনক্রিট) মেথডও থাকতে পারে।
সরাসরি ইনস্ট্যান্স করা যায় না।
উদাহরণ:
<?php
abstract class Vehicle {
// Abstract method
abstract public function startEngine();
// Normal method
public function stopEngine() {
echo "Engine stopped\n";
}
}
class Car extends Vehicle {
public function startEngine() {
echo "Car engine started\n";
}
}
// $vehicle = new Vehicle(); // এটি সম্ভব নয়
$car = new Car();
$car->startEngine(); // Output: Car engine started
$car->stopEngine(); // Output: Engine stopped
?>
ব্যাখ্যা:
Vehicleএকটি abstract ক্লাস।startEngine()হল abstract মেথড, যা চাইল্ড ক্লাসCarএ ইমপ্লিমেন্ট করা হয়েছে।stopEngine()হল সাধারণ মেথড, যা চাইল্ড ক্লাসে সরাসরি ব্যবহার করা যায়।
Interfaces (ইন্টারফেস)
Interface হলো একটি চুক্তি (contract) যা বলে দেয় যে, যে কোনো ক্লাস এই ইন্টারফেসটি ইমপ্লিমেন্ট করবে, তাকে অবশ্যই এই ইন্টারফেসের সব মেথড ইমপ্লিমেন্ট করতে হবে।
Interface এর মূল বৈশিষ্ট্য:
Interface এ শুধুমাত্র মেথড ডিক্লারেশন থাকে, কনক্রিট কোড নয়।
একাধিক ইন্টারফেস একটি ক্লাসে ইমপ্লিমেন্ট করা যায়।
Interface এ প্রপার্টি ডিফাইন করা যায় না (PHP 8+ এ কন্সট্যান্ট ব্যতীত)।
উদাহরণ:
<?php
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
echo "Logging to file: $message\n";
}
}
class DatabaseLogger implements Logger {
public function log($message) {
echo "Logging to database: $message\n";
}
}
$fileLogger = new FileLogger();
$fileLogger->log("File logger active"); // Output: Logging to file: File logger active
$dbLogger = new DatabaseLogger();
$dbLogger->log("Database logger active"); // Output: Logging to database: Database logger active
?>
ব্যাখ্যা:
Loggerএকটি ইন্টারফেস যাlog()মেথড ডিক্লারেশন করে।FileLoggerএবংDatabaseLoggerক্লাসগুলোLoggerইন্টারফেস ইমপ্লিমেন্ট করে।ইন্টারফেস ব্যবহার করলে আমরা কোডকে আরও modular এবং scalable করতে পারি।
Abstract Classes vs Interfaces
| বৈশিষ্ট্য | Abstract Class | Interface |
| ইনস্ট্যান্স | সরাসরি ইনস্ট্যান্স করা যায় না | সরাসরি ইনস্ট্যান্স করা যায় না |
| মেথড | Abstract + Normal Method থাকতে পারে | শুধুমাত্র মেথড ডিক্লারেশন থাকে |
| মাল্টিপল ইনহেরিট্যান্স | শুধুমাত্র একটিতে ইনহেরিট করা যায় | একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা যায় |
| প্রপার্টি | প্রপার্টি থাকতে পারে | কন্সট্যান্ট ব্যতীত প্রপার্টি থাকে না |
সারসংক্ষেপ:
যদি আপনি চাইবেন একটি বেস ক্লাসের মধ্যে কিছু সাধারণ ফাংশন থাকুক, ব্যবহার করুন Abstract Class।
যদি আপনার ক্লাসগুলোকে একটি চুক্তি অনুযায়ী কাজ করতে বাধ্য করতে চান, ব্যবহার করুন Interface।
বাস্তব জীবনের উদাহরণ
ধরা যাক আমরা একটি ই-কমার্স সিস্টেম বানাচ্ছি। এখানে বিভিন্ন পেমেন্ট গেটওয়ে থাকতে পারে।
interface PaymentGateway {
public function pay($amount);
}
class PayPal implements PaymentGateway {
public function pay($amount) {
echo "Paid $amount via PayPal\n";
}
}
class Stripe implements PaymentGateway {
public function pay($amount) {
echo "Paid $amount via Stripe\n";
}
}
$paypal = new PayPal();
$paypal->pay(100); // Paid 100 via PayPal
$stripe = new Stripe();
$stripe->pay(200); // Paid 200 via Stripe
এখানে ইন্টারফেস নিশ্চিত করছে, সব পেমেন্ট গেটওয়ে ক্লাসে pay() মেথড থাকবে।
Advanced PHP OOP এর Abstract Classes এবং Interfaces ব্যবহার করলে আপনার কোড:
Modular, scalable এবং re-usable হয়।
বড় প্রজেক্টে maintenance সহজ হয়।
কোডের consistency এবং flexibility বৃদ্ধি পায়।
PHP প্রজেক্টে abstract classes এবং interfaces ঠিকভাবে ব্যবহার করলে, বড় টিমে কাজ করাও অনেক সহজ হয়।




