PHP-এ OOP-তে ক্লাস থেকে ইনহেরিটেন্স এবং ইন্টারফেস ইমপ্লিমেন্টেশন
একটি ক্লাস অন্য একটি ক্লাস থেকে ইনহেরিট করতে পারে এবং একই সাথে একটি ইন্টারফেস ইমপ্লিমেন্ট করতে পারে। আসুন একটি ব্যবহারিক উদাহরণে দেখি।
ধরুন আমরা একটি Programmer ক্লাস তৈরি করতে চাই,
যার একটি নাম, বেতন এবং প্রোগ্রামার যে ভাষাগুলো জানে তার একটি তালিকা থাকবে।
আমাদের ক্লাসের বর্ণনা এখনও বেশ অস্পষ্ট:
হ্যাঁ, ক্লাসে নাম, বেতন, ভাষা থাকবে -
কিন্তু আমাদের ক্লাসে কোন কোন মেথড থাকবে?
আসুন iProgrammer ইন্টারফেস ব্যবহার করে
আমাদের ক্লাসটিকে আরও সঠিকভাবে বর্ণনা করি:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
ধরুন আমরা ইতিমধ্যেই ইমপ্লিমেন্ট করা আমাদের ক্লাসগুলোর মধ্যে খোঁজাখুঁজি করলাম এবং দেখা গেছে যে আমাদের কাছে ইতিমধ্যেই Employee নামে একটি অনুরূপ ক্লাস আছে। এটি Programmer ক্লাসের সব মেথড ইমপ্লিমেন্ট করে না, তবে কিছু অংশ করে।
আমাদের কাছে ইতিমধ্যে বিদ্যমান ক্লাসের কোডটি এখানে দেওয়া হল:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
আমাদের ক্ষেত্রে এটা করা যৌক্তিক যে,
আমাদের নতুন Programmer ক্লাসটি
প্রয়োজনীয় মেথডগুলোর一部分 Employee ক্লাস থেকে ইনহেরিট করবে (এবং বাকি部分 আমরা পরে নতুন ক্লাসেই ইমপ্লিমেন্ট করব):
<?php
class Programmer extends Employee
{
}
?>
একই সময়ে, আমরা জানি যে Programmer ক্লাসটিকে
iProgrammer ইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে:
<?php
class Programmer implements iProgrammer
{
}
?>
আসুন Employee ক্লাস থেকে ইনহেরিটেন্স এবং
iProgrammer ইন্টারফেসের ইমপ্লিমেন্টেশন একত্রিত করি:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
এর ফলে, আমাদের Programmer ক্লাসটি
Employee ক্লাস থেকে __construct, getName এবং getSalary মেথডগুলো ইনহেরিট করবে,
আর addLang এবং getLangs মেথডগুলো
আমাদেরকে ইমপ্লিমেন্ট করতে হবে:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// ইমপ্লিমেন্টেশন
}
public function getLangs()
{
// ইমপ্লিমেন্টেশন
}
}
?>
iProgrammer ইন্টারফেসের জন্য এটা গুরুত্বপূর্ণ নয় যে,
ক্লাসের মেথডগুলো নিজস্ব না ইনহেরিটেড -
প্রধান কথা হলো, বর্ণিত সমস্ত মেথড যেন ইমপ্লিমেন্টেড থাকে।
আমার Employee ক্লাসের কোড
এবং iProgrammer ইন্টারফেসের কোড কপি করুন। আমার Programmer ক্লাসের খসড়াটি কপি করবেন না -
আমার কোড না দেখে নিজে থেকেই এই ক্লাসটি ইমপ্লিমেন্ট করুন।