PHP Object Oriented Programming পর্ব-৯: PHP Object Interface

Object Oriented Programming এ Object Interface কি?

Object Oriented Programming এ PHP Object Interface এর ধারণা টা অনেকটা একজন Web Developer এর কাজের ধরণের মত। একজন Web Developer যখন কোনো একটি HTML Template বানায় প্রথমে তাকে একটি PSD ডিজাইন দেয়া হয়। এর মাধ্যমে Web Developer বুঝতে পারে তাকে HTML দিয়ে কি বানাতে হবে। অর্থাৎ এর রং , মেনু এবং বাটন এবং এর input গুলো দেখতে কেমন হবে এসবই বর্ননা করা থাকে PSD ডিজাইনে। একজন Web Developer চাইলেই কিন্তু PSD ডিজাইনকে সরাসরি ব্যবহার করতে পারেনা অথবা ব্যবহার করা সম্ভবও না। এর মানে হলো আপনাকে অবশ্যই PSD থেকে HTML এ কনভার্ট করে একে ব্যবহার করতে হবে। আর একে বলা হয় Implementation। তাহলে এখানে PSD টিই হলো পুরো Template এর একটি Interface অর্থাৎ Template টি কেমন হবে তা এখানেই বর্নানা করা হয়েছে, আর Object Oriented Programming এর interface ও একই। আপনার একটি interface থাকবে যেখানে আপনি class গুলো কি কাজ করবে তা থাকবে। কিন্তু কিভাবে কাজ করবে সেটি বলা থাকবে না। আর interface গুলোকে আপনি সরাসরি ব্যবহার করতে পারবেন না, সেজন্য অবশ্যই একে class এর উপর implement করে নিতে হবে।। abstract class আর interface প্রায় একই, শুধু পার্থক্য হচ্ছে abstract class এ property, constant, abstract এবং non-abstract সব ধরনের Method ই থাকতে পারে এবং সবগুলো Method এর Visibility public অথবা protected থাকতে পারে । কিন্তু interface এর মধ্যে শুধু method থাকতে পারবে এবং সবগুলো Method বাই ডিফল্ট abstract Method হিসেবে থাকে এবং সবগুলো Method এর Visibility অবশ্যই public হতে হবে। সাধারণত: একটা child class শুধু মাত্র একটা Parent Class থেকেই inherit করতে পারে, অর্থাৎ, একই সময়ে একাধিক class থেকে inherit করতে পারেনা। কিন্তু একটা class এর উপর একই সময়ে একাধিক interface implement করা যায়। interface এর সবগুলো Method কে সম সংখ্যক Parameter সহ যেই class এ implement করা হয়েছে সেই class এ অবশ্যই implement করতে হবে। অর্থাৎ, আপনি চাইলেই implement কৃত class এ কোন Method এর একটি Parameter যোগ বা বাদ দিতে পারবেন না । তবে default value সহ Parameter যোগ করতে পারবেন।

interface ঘোষণা করার নিয়ম কি?

PHP Object Interface ঘোষণা করার জন্য interface keyword এর পর interface এর নাম দিতে হয়। নিচের সিনটেক্স টি দেখুন :

<?php
interface MyInterface {
  public function aMethod();
  public function anotherMethod();
}
?>

PHP Object Interface কে class এর মধ্যে implement করার নিয়ম কি?

interface কে কোনো class এ implement করতে হলে class এর নামের পর implements keyword দিতে হয়, তারপর interface এর নাম গুলোকে কমা (,) দিয়ে লিখতে হয়। নিচের সিনটেক্স টি দেখুন :

<?php
class MyClass implements MyInterface1,...,MyInterfaceN {
  public function aMethod() {
    // (code to implement the method)
  }
  public function anotherMethod() {
    // (code to implement the method)
  }
}
?>

interface ব্যবহার করে এইবার একটা বাস্তব উদাহরণে আশা যাক:

উদাহরণস্বরূপ , একটি Web Forum এর কথা ধরা যাক , Forum মেম্বারদের information কে Database থেকে তুলে আনা এবং সংরক্ষণ করার জন্য একটা Member class থাকবে। এবং ফোরাম মেম্বারদের তৈরী করা টপিক গুলোকে তুলে আনা এবং সংরক্ষণ করার জন্য একটা Topic Class থাকবে। এবং এগুলো একটা আরেকটা থেকে আলাদা থাকবে , কারণ তারা প্রত্যেকে আলাদা আলাদা ভাবে কাজ করে। কিন্তু দুটি class ই Data তুলে আনা এবং সংরক্ষণ এর মত কিছু common কাজ করে।

যাইহোক, আমরা Member এবং Topic দুটি Object দিয়ে MySQL Database থেকে Data তুলে আনা এবং সংরক্ষণ এর মত কিছু common কাজগুলো করার জন্য Persistable নামে একটা interface তৈরী করব। যা Database এর common কাজগুলো করার জন্য Method গুলোকে নির্দিষ্ট করে দেবে। নিচের উদাহরণটি দেখুন :

interface Persistable {
  public function save();
  public function load();
  public function delete();
}

এখন আসুন আমরা আমাদের Member Class তৈরী করব , এবং এর মধ্যে Persistable interface কে implement করব। এর মানে হল যে Member Class এর মধ্যে অবশ্যই save(), load() এবং delete() Method গুলো implement করতে হবে। পাশাপাশি class এর নিজস্ব Method গুলো ও থাকবে। নিচের উদাহরণটি দেখুন :

<?php
class Member implements Persistable {
  private $username;
  private $location;
  private $homepage;
  public function __construct( $username, $location, $homepage ) {
    $this->username = $username;
    $this->location = $location;
    $this->homepage = $homepage;
  }
  public function getUsername() {
    return $this->username;
  }
  public function getLocation() {
    return $this->location;
  }
  public function getHomepage() {
    return $this->homepage;
  }
  public function save() {
    echo "Saving member to database<br>";
  }
  public function load() {
    echo "Loading member from database<br>";
  }
  public function delete () {
    echo "Deleting member from database<br>";
  }
}
?>

একই ভাবে Topic Class তৈরী করব , এবং এর মধ্যে Persistable interface কে implement করব। এর মানে হল এখানেও Topic Class এর মধ্যে অবশ্যই save(), load() এবং delete() Method গুলো implement করতে হবে। পাশাপাশি class এর নিজস্ব Method গুলো ও থাকবে। নিচের উদাহরণটি দেখুন :

<?php
class Topic implements Persistable {
  private $subject;
  private $author;
  private $createdTime;
  public function __construct( $subject, $author ) {
    $this->subject = $subject;
    $this->author = $author;
    $this->createdTime = time();
  }
  public function showHeader() {
    $createdTimeString = date( 'l jS M Y h:i:s A', $this->createdTime );
    $authorName = $this->author->getUsername();
    echo "$this->subject (created on $createdTimeString by $authorName)<br>";
  }
  public function save() {
    echo "Saving topic to database<br>";
  }
  public function load() {
    echo "Loading topic from database<br>";
  }
  public function delete () {
    echo "Deleting topic from database<br>";
  }
}
?>

এখন আমরা Member Object তৈরী করব getUsername() মেথড call করার জন্য। এবং Topic Object তৈরী করব showHeader() মেথড call করার জন্য। একই সাথে আমরা PHP Object Interface method গুলো যেমন save(), load() এবং delete() গুলো call করব, যেগুলো দুটি class এ implement করা হয়েছে।

<?php
$aMember = new Member( "Farhan", "Dhaka", 'http://satech360.com/' );
echo $aMember->getUsername() . " lives in " . $aMember->getLocation() ."<br>";
$aMember->save();
$aTopic = new Topic( "Futonto Golap", $aMember );
$aTopic->showHeader();
$aTopic->save();
?>

Leave A Reply

Your email address will not be published. Required fields are marked *