PHP-তে OOP-তে ইন্টারফেসে কনস্ট্রাক্টর ডিক্লেয়ারেশন
ইন্টারফেসে ক্লাস কনস্ট্রাক্টরও ডিক্লেয়ার করা যায়।
একটি উদাহরণ দেখা যাক। ধরা যাক আমরা একটি Rectangle ক্লাস বানাতে চাই, যেখানে
ক্ষেত্রফল, পরিসীমা বের করার মেথড থাকবে,
এবং একটি কনস্ট্রাক্টরও থাকবে যা দুটি প্যারামিটার নেবে।
আসুন ইন্টারফেস ব্যবহার করে আমাদের ক্লাসটি বর্ণনা করি:
<?php
interface iRectangle
{
public function __construct($a, $b); // দুটি প্যারামিটার সহ কনস্ট্রাক্টর
public function getSquare();
public function getPerimeter();
}
?>
আসুন আমাদের iRectangle ইন্টারফেসের
ইমপ্লিমেন্টেশন লিখি:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
ইন্টারফেসে কনস্ট্রাক্টর ডিক্লেয়ার করলে আমাদের কী লাভ হল? প্রথমত, আমরা ক্লাসে কনস্ট্রাক্টর ইমপ্লিমেন্ট করতে ভুলবো না। দ্বিতীয়ত, ইন্টারফেসটি স্পষ্টভাবে নির্দেশ করে, যে ক্লাস কনস্ট্রাক্টরকে দুটি প্যারামিটার নিতে হবে: এর বেশি বা কম নয়। এটি দুর্ঘটনাজনিত ভুল থেকেও আমাদের রক্ষা করবে।
আমরা কেন আলাদা ইন্টারফেস iRectangle বানালাম,
Figure ইন্টারফেসে কনস্ট্রাক্টর যোগ করিনি কেন?
কারণ সব আকৃতির বাহুর সংখ্যা ভিন্ন
এবং সেই অনুযায়ী, কনস্ট্রাক্টরে প্যারামিটারের সংখ্যাও
ভিন্ন। তাই আমাদেরকে আয়তক্ষেত্রের জন্য আলাদা, আরও সুনির্দিষ্ট ইন্টারফেস
তৈরি করতে হয়েছে।
একটি iCube ইন্টারফেস বানান, যা
কিউব আকৃতিটিকে বর্ণনা করবে।让你的接口描述一个立方体图形。
আপনার ইন্টারফেসটি যেন একটি কনস্ট্রাক্টর বর্ণনা করে, যার প্যারামিটার হিসেবে কিউবের বাহু নেয়, এবং কিউবের আয়তন এবং পৃষ্ঠের ক্ষেত্রফল পাবার মেথডগুলোও বর্ণনা করে。
একটি Cube ক্লাস বানান, যা iCube ইন্টারফেসটি
ইমপ্লিমেন্ট করে।
একটি iUser ইন্টারফেস বানান, যা
ইউজারকে বর্ণনা করবে। ধরে নেওয়া হচ্ছে, যে
ইউজারের একটি নাম এবং বয়স থাকবে এবং এই ফিল্ডগুলো
কনস্ট্রাক্টরের প্যারামিটার হিসেবে পাঠানো হবে।
আপনার ইন্টারফেসটি এটাও নির্ধারণ করবে, যে
ইউজারের নাম এবং বয়সের জন্য গেটার মেথড থাকবে (সেটার নয়)।
একটি User ক্লাস বানান, যা iUser ইন্টারফেসটি
ইমপ্লিমেন্ট করে।