পিএইচপি OOP ইন্টারফেস
প্যারেন্ট ক্লাস চাইল্ড ক্লাসের সাথে এই অঙ্গীকার করে যে, মেথড বাস্তবায়নের জন্য চাইল্ড ক্লাস প্যারেন্ট ক্লাস এর abstract মেথডসমূহ এক্সেস করতে পারবে।
সুতরাং একটি ইন্টারফেস(interfaces) এর অ্যাবস্ট্রাক্ট মেথডসমুহকে তার অন্তর্ভুক্ত চাইল্ড ক্লাসে অবশ্যই বাস্তবায়ন করতে হবে। যখন অনেক প্রোগ্রামার একত্রে কাজ করে তখন এটির ব্যবহার অনেক সুবিধাজনক। কারণ, প্রোগ্রামাররা যে মেথডসমুহ নিয়ে নিয়ে কাজ করবে তা ইন্টারফেসে পূর্বে থেকেই নির্ধারণ করে দেওয়া থাকে।
কিভাবে ইন্টারফেস ডিক্লেয়ার করবেন?
আপনি interface কীওয়ার্ড ব্যবহার করে নিম্নের মত ইন্টারফেস ডিক্লেয়ার করতে পারেনঃ
interface interfaceName {
// মেথড সমূহ
}
অ্যাবস্ট্রাক্ট মেথড এবং কনস্ট্যান্ট ব্যাতিত ইন্টারফেস অ্যাবস্ট্রাক্ট ক্লাসের মতই। ইন্টারফেসের মধ্যে কোনো প্রোপার্টি থাকে না, শুধুমাত্র public মেথড থাকে।
এখন আমরা Truck নামে একটি ইন্টারফেস ক্লাস তৈরি করবো যা সব ধরণের ট্রাক কে হ্যান্ডেল করবে এবং এটা নিশ্চিত করবে যে, এর সকল চাইল্ড ক্লাসে setTruckModel()
এবং getTruckModel()
মেথড এর বাস্তবায়ন ঘটাবেঃ
<?php
interface Truck {
// মেথড সমূহ
public function setTruckModel($name);
public function getTruckModel();
}
?>
কিভাবে চাইল্ড ক্লাসে ইন্টারফেস সংযুক্ত করবেন?
implements কীওয়ার্ড ব্যবহার করে চাইল্ড ক্লাসে ইন্টারফেস সংযুক্ত করতে হয়ঃ
class Child implements interfaceName {
// ইন্টারফেসের মেথড সমুহকে ডিফাইন করে
}
এখন আমরা TruckDetails নামে Truck ইন্টারফেসের একটি চাইল্ড ক্লাস তৈরি করবো এবং এতে Truck ইন্টারফেস থেকে ইনহেরিটকৃত প্যারামিটারসহ সকল মেথড ডিফাইন করবোঃ
class TruckDetails implements Truck {
private $model;
public function setTruckModel($name) {
$this->model = $name;
}
public function getTruckModel() {
return $this->model;
}
}
চাইল্ড ক্লাসে কি একাধিক ইন্টারফেস সংযুক্ত করা যায়?
হ্যাঁ, অবশ্যই। আমরা একটি চাইল্ড ক্লাসে অসংখ্য ইন্টারফেস সংযুক্ত করতে পারি। একটি ক্লাসে একাধিক ইন্টারফেস সংযুক্ত করার জন্য কমা(,) চিহ্ন ব্যবহার করে ইন্টারফেসসমূহক পৃথক করা হয়।
একাধিক ইন্টারফেস যুক্ত করার সিনট্যাক্স
class Child implements Interface1, Interface2,...,InterfaceN
এখন আমরা ভিন্ন একটি ইন্টারফেস তৈরি করবো যাতে দুইটি মেথড ডিক্লেয়ার করবো। যথা- setHasWheels()
যা বুলিয়ান মান ধারন করবে এবং getHasWheels()
যা ট্রাক এর চাকা আছে কিনা আউটপুট দিবে।
interface Wheels {
public function setHasWheels($bool);
public function getHasWheels();
}
এখন আমাদের চাইল্ড ক্লাসে উপরের দুইটি ইন্টারফেস সংযুক্ত করবোঃ
class TruckDetails implements Truck, Wheels {
private $model;
private $hasWheels;
public function setTruckModel($name) {
$this->model = $name;
}
public function getTruckModel() {
return $this->model;
}
public function setHasWheels($bool) {
$this->hasWheels = $bool;
}
public function getHasWheels() {
return ($this->hasWheels)? "Has wheels" : "No wheels";
}
}
এখন আমরা চাইল্ড ক্লাস থেকে অবজেক্ট তৈরি করবো এবং ফলাফল আউটপুট নিবঃ
// অবজেক্ট তৈরি
$truckdetails = new TruckDetails();
// মান সেট
$truckdetails->setTruckModel("Toyota");
$truckdetails->setHasWheels(true);
// ফলাফল আউটপুট
echo $truckdetails->getTruckModel();
echo $truckdetails->getHasWheels();
Toyota Has wheels
ইন্টারফেস এবং অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে পার্থক্য
আপনারা আমাদের এই টিউটোরিয়ালে নিশ্চয় লক্ষ্য করেছেন যে, ইন্টারফেস এবং অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে অনেক মিল রয়েছে। যাইহোক, এদের মধ্যে বেশ কিছু পার্থক্যও বিদ্যমান। নিম্নে ইন্টারফেস এবং অ্যাবস্ট্রাক্ট ক্লাসের পার্থক্য তুলে ধরা হলোঃ
- ইন্টারফেসের মধ্যে অ্যাবস্ট্রাক্ট মেথড ও কনস্ট্যান্ট থাকে এবং কনক্রিট(concrete) ভ্যারিয়েবল এবং মেথড ধারন করে না, কিন্তু অ্যাবস্ট্রাক্ট ক্লাস অ্যাবস্ট্রাক্ট মেথড, কনস্ট্যান্ট, কনক্রিট(concrete) ভ্যারিয়েবল এবং মেথড ধারন করে।
- ইন্টারফেসে ক্লাসের সকল মেথড অবশ্যই public হতে হবে, কিন্তু অ্যাবস্ট্রাক্ট ক্লাস সকল অ্যাক্সেস মডিফায়ার সমর্থন করে।
- একটি চাইল্ড ক্লাস একাসাথে একাধিক ইন্টারফেস ব্যবহার করতে পারে, কিন্তু অ্যাবস্ট্রাক্ট ক্লাসের ক্ষেত্রে চাইল্ড ক্লাস একের অধিক অ্যাবস্ট্রাক্ট ক্লাস থেকে ইনহেরিট হতে পারে না।
নিম্নের টেবিলে পার্থক্য গুলো সারাশং আকারে দেখানো হলোঃ
ইন্টারফেস | অ্যাবস্ট্রাক্ট ক্লাস | |
---|---|---|
কোড | অ্যাবস্ট্রাক্ট মেথড, কনস্ট্যান্ট | অ্যাবস্ট্রাক্ট মেথড, কনস্ট্যান্ট, কনক্রিট মেথড, কনক্রিট ভ্যারিয়েবল |
অ্যাক্সেস মডিফায়ার | public | public private protected |
প্যারেন্ট ক্লাসের সংখ্যা | একটি চাইল্ড ক্লাসের একাধিক প্যারেন্ট ক্লাস বা ইন্টারফেস থাকতে পারে। | একটি চাইল্ড ক্লাসের শুধুমাত্র একটি প্যারেন্ট ক্লাস বা অ্যাবস্ট্রাক্ট থাকবে। |