প্রোপার্টি এবং মেথড চেইনিং
পিএইচপি OOP তে মেথড এবং প্রোপার্টি সমুহকে চেইনিং এর মাধ্যমে একই কমান্ডে কয়েকটি কার্য সম্পাদন করা যায়।
প্রোপার্টি এবং মেথড চেইনিং
পূর্ববর্তী অধ্যায়ে আমরা $this
কীওয়ার্ড ব্যবহার করে ক্লাস স্কোপ থেকে প্রোপার্টি এবং মেথড অ্যাক্সেস করা শিখেছিলাম। এই অধ্যায়ে আমরা শিখবো, যখন কোনো মেথড $this
কীওয়ার্ড রিটার্ন করে তখন ঐ ক্লাস এর মেথডসমূহ স্বয়ংক্রিয়ভাবে একটির সাথে অন্যটি যুক্ত হয়ে যায় অর্থাৎ চেইন সৃষ্টি হয়।
উদাহরণস্বরূপঃ নিম্নের Truck
ক্লাসটি দেখুন। নিম্নের প্রোগ্রামটির মাধ্যমে একটি চলমান ট্রাকের টাঙ্কে কি পরিমান জ্বালানি আছে তা পরিমাপ করতে যাচ্ছি। এক্ষেত্রে জ্বালানির পরিমান দুটি প্যারামিটার এর উপর নির্ভরশীল। যথা- যাত্রা শুরুর সময় ট্রাকের টাঙ্কিতে কি পরিমান জ্বালানি লোড করা হয়েছিল এবং ট্রাকটি কয় মাইল পথ অতিক্রম করেছে।
জ্বালানির পরিমান নির্ণয়ের জন্য প্রথমেই আমরা Truck ক্লাসের মধ্যে একটি public
প্রোপার্টি $fuelInTank
ব্যবহার করবোঃ
<?php
class Truck{
public $fuelInTank;
}
?>
এইবার আমরা Truck ক্লাসে দুইটি মেথড যুক্ত করবো। প্রথম মেথড fuel() ট্রাকের টাঙ্কিতে জ্বালানির পরিমান গ্যালনে যুক্ত করবে। আর দ্বিতীয় মেথড totalRide() নির্দিষ্ট দুরত্ব অতিক্রম করার পর কি পরিমান জ্বালানি শেষ হয়েছে তা হিসাব করবে এবং ট্রাকের ট্রাঙ্কি থেকে এটি বিয়োগ করবে।
<?php
class Truck{
public $fuelInTank;
public function fuel($gallon){
$this->fuelInTank += $gallon;
}
public function totalRide($miles){
$gallons = $miles/60;
$this->fuelInTank -= ($gallons);
}
}
?>
যেহেতু আমরা আমাদের কোডগুলো অধিক স্বচ্ছ এবং মার্জিত আকারে চাই, তাই আমরা প্রোপার্টি এবং মেথড গুলো চেইনিং এর মাধ্যমে একত্রিত করবো। প্রোপার্টি বা মেথড চেইন এর জন্য ড্যাশ-এরো চিহ্ন ব্যবহৃত হয়ঃ
$fuelInTank = $truck->fuel(10)->totalRide(50)->fuelInTank;
কোড এর ব্যাখ্যাঃ ১০ গ্যালন জ্বালানিতে ৫০ মাইল ড্রাইভিং করার পর কি পরিমান জ্বালানি বাকি আছে তা বলে দিবে।
চেইন এর কাজ সম্পাদনের জন্য মেথডসমূহকে অবশ্যই অবজেক্ট রিটার্ন করতে হবে। আরা যেহেতু আমরা ক্লাস এর মধ্য থেকে অবজেক্ট ব্যবহার করতে চাচ্ছি, সুতরাং মেথডসমূহকে $this
কীওয়ার্ড রিটার্ন করতে হবে।
নিচের কোডে লক্ষ্য করলে দেখবেন, চেইন এর কাজ সম্পন্ন করার জন্য কিভাবে প্রত্যেকটি মেথড থেকে অব্জেক্ট হিসাবে $this
কিওয়াডকে রিটার্ন করানো হয়েছে।
<?php
class Truck{
public $fuelInTank;
public function fuel($gallon){
$this->fuelInTank += $gallon;
return $this;
}
public function totalRide($miles){
$gallons = $miles/60;
$this->fuelInTank -= ($gallons);
return $this;
}
}
?>
এখন আমরা Truck
ক্লাসটির একটি অবজেক্ট তৈরি করবো এবং দেখবো ট্রাকটি ১০ গ্যালন তৈলে ৫০ মাইল যাওয়ার পর আর কি পরিমান তৈল বাকি আছে।
<?php
//নতুন অবজেক্ট তৈরি
$thk = new Truck();
// চেইন তৈরি
$fuelInTank = $truck->fuel(10)->totalRide(50)->fuelInTank;
echo "Fuel left: ". $fuelInTank. " gallons.";
?>
<?php
// Truck ক্লাস
class Truck{
public $fuelInTank;
public function fuel($gallon){
$this->fuelInTank += $gallon;
return $this;
}
public function totalRide($miles){
$gallons = $miles/60;
$this->fuelInTank -= ($gallons);
return $this;
}
}
$truck = new Truck();
$fuelInTank = $truck->fuel(10)->totalRide(50)->fuelInTank;
echo "Fuel left: ". $fuelInTank. " gallons.";
?>
Fuel left: 9.1666666666667 gallons.