সাম্প্রতিক

10/recent/ticker-posts

Header Ads Widget

Web Development - PHP ( OOP-02) Part 07

 


Visibility or Access Modifier in PHP

PHP তে Visibility বা Access modifier কি ?

ইংরেজি শব্দ Visibility অর্থ দৃশ্যমানতা, অর্থাৎ class এর মধ্যে যেকোনো property,constant অথবা Method কে access পাবে তা visibility দিয়ে নির্ধারিত হয়। Visibility গুলো সাধারণত class এর মধ্যে constant,property, method এর আগে ঘোষণা করতে হয়।

PHP তে Visibility বা Access modifier কয়টি এবং কি কি ?

       Public

       Protected

       Private

Public

Class এর মধ্যে constant, property, method গুলোকে যদি একই class বা class নিজের মধ্যে , child class এবং class এর বাহির থেকে ব্যবহার রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে public ঘোষণা করতে হয়।

আমাদের GrandFather class এর $name নামক Property টি public হওয়ায়, $name property টি আমরা একই সাথে current class, child class এবং class এর বাহির থেকেও access করতে পেরেছি

Visibility or Access Modifier in PHP

<?php

class GrandFather

{

    public $name=‘sahabuddin';  // A public variable

    public function getName(){

      return $this->name;

    }

}

 

class Daddy extends GrandFather // Inherited class

{

    function displayGrandFaName()

    {

        return $this->name; // The public variable will be available to the inherited class

    }

 

}

 

$grandFa=new GrandFather;

 

echo $grandFa->getName(),"\n";

 

// Inherited class Daddy wants to know Grandpas Name

$daddy = new Daddy;

echo $daddy->displayGrandFaName(),"\n"; // Prints ‘sahabuddin'

 

// Public variables can also be accessed outside of the class!

$outsiderWantstoKnowGrandpasName = new GrandFather;

echo $outsiderWantstoKnowGrandpasName->name; // Prints ‘sahabuddin’

?>

protected:

Class এর মধ্যে constant, property, method গুলোকে যদি শুধু একই class বা class নিজের মধ্যে এবং তার child class এর মধ্যে ব্যবহার সীমিত রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে protected ঘোষণা করতে হয়।

আমাদের GrandFather class এর $name নামক Property টি protected হওয়ায়, $name property টি আমরা একই সাথে current class এবং child class থেকে access করতে পেরেছি কিন্তু current class অথবা child class এর বাহির থেকে access করতে পারবোনা, করলে আপনাকে fatal error দেখাবে

private :

Class এর মধ্যে constant, property, method গুলোকে যদি শুধু একই class বা class নিজের মধ্যে ব্যবহার সীমিত রাখতে চাই , তাহলে সেইসব constant, property, method গুলোকে private ঘোষণা করতে হয়।

আমাদের GrandFather class এর $name নামক Property টি private হওয়ায়, $name property টি আমরা শুধু মাত্র current class এর ভিতরে ব্যবহার করতে পেরেছি, কিন্তু current class এর বাহির থেকে access বা ব্যবহার করতে পারবোনা, করলে আপনাকে error দেখাবে

 

<?php

class GrandFather

{

    private $name=‘sahabuddin';  // A Protected variable

    public function getName(){

      return $this->name;

    }

}

 

class Daddy extends GrandFather // Inherited class

{

    function displayGrandFaName()

    {

        return $this->name; // The Private Property will not available to the inherited class and will show notice

    }

 

}

 

$grandFa=new GrandFather;

 

echo $grandFa->getName(),"\n"; //Prints ‘Sahabuddin'

echo $gradFa->name, "\n"; //Results in a Notice

 

// Inherited class Daddy wants to know Grandpas Name

$daddy = new Daddy;

echo $daddy->displayGrandFaName(),"\n"; // Results in a Notice

 

// Protected Property can not be accessed outside of the class!

$outsiderWantstoKnowGrandpasName = new GrandFather;

echo $outsiderWantstoKnowGrandpasName->name; // // Results in a Fatal Error

 

?>

PHP OOP Inheritance



Inheritance কি?

ইংরেজি শব্দ inheritance অর্থ হচ্ছে উত্তরাধিকার। Object Oriented Programming এক class থেকে কিছু ফাংশনালিটি (Methods) বৈশিষ্ট্য (Property) অন্য class শেয়ার করার একটা পদ্ধতি হচ্ছে Inheritance. বা কোন Class বা Object অন্য কোন Class বা Object এর বৈশিষ্ট্য অর্জন করে থাকে যে প্রক্রিয়ায় তাকে উত্তরাধিকার সূত্র বা Inheritance বলে। আরো সহজ ভাবে বলা যায় , একটা ক্লাসকে (Parent Class) Inherit (অনুসরণ) করে তার কিছু বৈশিষ্ট্য আরেকটি উত্তরসূরি (child class) এর মধ্যে ব্যবহার করার প্রক্রিয়াকে Inheritance বলা হয়

PHP তে কিভাবে child class তৈরী হয় ?

child class তৈরী করতে হলে প্রথমে class কীওয়ার্ড এর পর child class এর নাম দিতে হয়, তারপর extends কীওয়ার্ড লিখে Parent Class এর নাম লিখতে হয়।

<?php

class ParentClass {

  // properties and methods here

}

 

class ChildClass extends ParentClass {

  // additional properties and methods here

}

?>

PHP তে Inheritance কিভাবে কাজ করে?

মূলত Parent Class এবং Child Class ধারণার উপর ভিত্তি করে Inheritance ব্যাপারটি আসে। আপনি যখন একটা child class তৈরী করবেন , সেটি তার parent class এর সব protected এবং public Property, Method, Constant গুলো inherit করবে। আরো সহজ ভাবে বলা যায় , একটি class যখন আরেকটি class কে extend করে তখন Parent Class এর সব Protected এবং public Property, Method এবং constant, child class define না করেও ব্যবহার বা access করা যায় পাশাপাশি child class আরো নতুন নতুন property এবং method অন্তর্ভুক্ত করতে পারবে

<?php

class Member {

  public $username = "";

  private $loggedIn = false;

  public function login() {

    $this->loggedIn = true;

  }

  public function logout() {

    $this->loggedIn = false;

  }

  public function isLoggedIn() {

    return $this->loggedIn;

  }

}

?>

PHP OOP Inheritance

ব্যাখ্যাউপরের Member Class টি একটি Web Forum Application এর জন্য করা একটা Class যেখানে ফোরাম মেম্বারদের জন্য login(), logout(), isLoggedIn() method তৈরী করা হয়েছে যেহেতু ফোরাম অ্যাডমিনিস্ট্রেটররাও Member, এখন আপনি Member Class থেকে একটি নতুন Child class তৈরী করতে পারেন, যেটার নাম হবে Administrator Class . আর তাতে সুবিধা হচ্ছে Administrator class , Member class এর সব protected এবং public property, Method এবং constant গুলোকে Inherit বা উত্তরাধিকার সূত্রে পাবে। চলুন এবার Member Class থেকে child class হিসেবে Administrator Class টি তৈরী করা যাক:

<?php

class Administrator extends Member {

  public function createForum( $forumName ) {

    echo "$this->username created a new forum: $forumName<br>";

  }

  public function banMember( $member ) {

    echo "$this->username banned the member: $member->username<br>";

  }

}

?>

ব্যাখ্যালক্ষ্য করুন Administrator class আমাদের অনেক কাজ নতুন করে করা লাগবেনা , Administrator Class তার Member Parent Class দিয়ে login, logout এবং user logged In কিনা সেগুলো inherit করে নিজে ব্যবহার করতে পারবে। এখন আপনি administrator স্পেসিফিক Method গুলো যেমন : createForum(), deleteForum() এবং banMember() আপনার administrator class যোগ করতে পারবেন। আর এতে সুবিধা হচ্ছে আপনি administrator class একই সাথে সাধারণ Member Class এর সুবিধা পাচ্ছেন, পাশাপাশি Administrative সুবিধা গুলোও পাচ্ছেন। আর এটাই inheritance. চলুন এবার Parent এবং Child Class দুটির উদাহরণ একসাথে দেখা যাক

<?php

class Member {

    public $username = "";

    private $loggedIn = false;

    public function login() {

        $this->loggedIn = true;

    }

    public function logout() {

        $this->loggedIn = false;

    }

    public function isLoggedIn() {

        return $this->loggedIn;

    }

}

 

class Administrator extends Member {

    public function createForum( $forumName ) {

        echo "$this->username created a new forum: $forumName<br>";

    }

    public function banMember( $member ) {

        echo "$this->username banned the member: $member->username<br>";

    }

}

 

// Create a new member and log them in

$member = new Member();

$member->username = "Sahab Uddin";

$member->login();

echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>";

 

// Create a new administrator and log them in

$admin = new Administrator();

$admin->username = "Farhan";

$admin->login();

echo $admin->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>";

// Displays "Mary created a new forum: SAtech360"

$admin->createForum( "SAtech360" );

// Displays "Farhan banned the member: Sahab Uddin"

$admin->banMember( $member );

?>

Method Overriding কি?

সাধারণত যখন একটা child class তৈরী হয়, তখন সেটি তার parent class এর সব Protected Property এবং Method গুলোকে Inherit করে নিয়ে আসে। কিন্তু কখনো কখনো আমাদেরকে Parent Class এর যেকোনো Method কে Child Class নতুন করে একই নামে লেখার দরকার হয়, এটা সাধারণত তখনই দরকার হয় , যখন দেখা যায়, Parent Class এর Method টি child class এর সব পারপাস পূরণ করতে পারছেনা। অর্থাৎ, আরো কিছু feature add করার দরকার হয়। Object Oriented Programming এর পরিভাষায় এটাকে বলা হয় Method Overriding. এক কোথায় , Parent Class এর কোনো Method কে Child Class একই নামে এবং সমান সংখ্যক parameter দিয়ে পুনরায় declare করলে Object Oriented Programming এর পরিভাষায় বলা হয় Method Overriding.

এবার একটা practical উদাহরণ দেওয়া যাক : দরুন আমাদের Member class টির login Method টি শুধু Login কাজটি করে। এখন যদি Administrator Class চায় , কখন কে লগইন করলো তার একটা log Entry রাখা দরকার। আর এর জন্য আমরা Method Overriding Feature টি ব্যবহার করবো। চলুন দেখা যাক :

Method Overriding

<?php

class Member {

  public $username = "";

  private $loggedIn = false;

  public function login() {

    $this->loggedIn = true;

  }

  public function logout() {

    $this->loggedIn = false;

  }

}

class Administrator extends Member {

  public function login() {

    $this->loggedIn = true;

    echo "Log entry: $this->username logged in<br>";

  }

}

// Create a new member and log them in

$member = new Member();

$member->username = "Sahab Uddin";

$member->login();

$member->logout();

// Create a new administrator and log them in

$admin = new Administrator();

$admin->username = "Farhan";

$admin->login();           // Displays "Log entry: Farhan logged in"

$admin->logout();

Post a Comment

0 Comments