PHP Object Oriented Programming পর্ব-১০: PHP OOP Overloading

PHP OOP Overloading কি?

PHP OOP Overloading
PHP OOP Overloading

class এর বাহির থেকে class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে class এর মধ্যে (যা পূর্ব থেকে define করা নাই এমন) যেকোনো property অথবা Method তৈরী করার পদ্ধতিকে PHP Object Oriented Programming এর পরিভাষায় Overloading বলা হয়। PHP OOP Overloading কে আমরা class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে property এবং Method তৈরী করার পদ্ধতিও বলতে পারি।

PHP OOP Overloading কত প্রকার ?

PHP OOP Overloading মূলত দুইপ্রকার:
১. Property Overloading
২. Method Overloading

Zend Certified PHP Engineering (ZCPE) Course

Property Overloading কি?

class এর বাহির থেকে class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে class এর মধ্যে (যা পূর্ব থেকে define করা নাই এমন) যেকোনো property তৈরী করার পদ্ধতিকে PHP Object Oriented Programming এর পরিভাষায় Property Over Loading বলা হয়। Property Overloading কে আমরা class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে property তৈরী করার পদ্ধতিও বলতে পারি।

PHP তে Property Overloading এ আমরা __set() function দিয়ে Overloaded property তে value সেট করি, __get() function দিয়ে Overloaded property এর value get করি, __unset() function দিয়ে Overloaded property এর value, class এর বাহির থেকে খালি করি এবং __isset() function দিয়ে Overloaded property এর value আছে কি না তা class এর বাহির থেকে চেক করি

PHP তে Property Overload করার জন্য __set() এবং __get ফাঙ্কশনের কাজ কি?

PHP তে Property Overload করার জন্য __set() function দিয়ে class এর বাহির থেকে নতুন property তৈরী করা যায়। এবং তৈরিকৃত property তে value set করা যায়। __get() function দিয়ে Overloaded property এর value কে class এর বাহির থেকে get করা যায়।

<?php
class PropertyTest
{
    /**  Location for overloaded data.  */
    private $data = array();

    public function __set($name, $value)
    {
        echo "Setting '$name' Property to '$value'\n";
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo "Getting '$name' Property with Value : ";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
    }

}


$obj = new PropertyTest;

$obj->a = "Masud Alam";
echo $obj->a . "\n";

?>

Property Overloading Value Set and Get

ব্যাখ্যা: প্রথমে আমরা __set() function দিয়ে class টির মধ্যে $a নামে একটি property তৈরী করি (যা আমাদের class এ define করা ছিলোনা ) একই সাথে $a তে value সেট করি। এবং একই সাথে $data নামে একটা private array property তে property name এবং তার value টি সংরক্ষণ করে রাখি। তারপর __get() function দিয়ে class টির মধ্যে $data array property থেকে $a নামে property এর value গেট করি।

Zend Certified PHP Engineering (ZCPE) Course

PHP তে Property Overload করার জন্য __isset() ফাঙ্কশনের কাজ কি?

class এর বাহির থেকে যখন কোনো overloaded property কে isset() function দিয়ে চেক করা হয়, তখন class এর মধ্যে __isset() function টি স্বয়ংক্রিয় ভাবে execute হয়। এবং overloaded property এর value আছে কি না তা চেক করার সুযোগ করে দেয়।

<?php
class PropertyTest
{
    /**  Location for overloaded data.  */
    private $data = array();

    public function __set($name, $value)
    {
        echo "Setting '$name' Property to '$value'\n";
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
        echo "Getting '$name' Property with Value : ";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
    }
    // Checking Property Value is set?
    public function __isset($name)
    {
        echo "Is '$name' Property set?\n";
        echo isset($this->data[$name])?"Yes '$name' Property is set":"No '$name' Property is Not set";
        echo "\n";
    }

}


$obj = new PropertyTest;

$obj->a = "Masud Alam";
echo $obj->a . "\n";
isset($obj->a);
isset($obj->b);

?>

PHP Property Overloading check Property Value is set

ব্যাখ্যা: লক্ষ্য করুন , লাইন নম্বর ৩৫ এবং ৩৬ এ ফাঙ্কশন isset() দিয়ে দুটি unknown property কে class এর মধ্যে value সেট আছে কিনা চেক করি, আর isset () function call করার সাথে সাথে আমাদের class এর মধ্যে ২১ নম্বর লাইনে __isset() ফাঙ্কশনটি স্বয়ংক্রিয় ভাবে execute হয়। overloaded property গুলোর value আছে কিনা তা চেক করে।

Zend Certified PHP Engineering (ZCPE) Course

PHP তে Property Overload করার জন্য __unset() ফাঙ্কশনের কাজ কি?

class এর বাহির থেকে যখন কোনো overloaded property কে unset() function দিয়ে চেক করা হয়, তখন class এর মধ্যে __unset() function টি স্বয়ংক্রিয় ভাবে execute হয়। এবং overloaded property এর value কে unset করার সুযোগ করে দেয়।

<?php
class PropertyTest
{
    /**  Location for overloaded data.  */
    private $data = array();

    public function __set($name, $value)
    {
        echo "Setting '$name' to '$value'\n";
        $this->data[$name] = $value;
    }

    public function __get($name)
    {
         echo "Getting '$name' Property with Value : ";
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
    }
    
    public function __isset($name)
    {
        echo "Is '$name' Property set?\n";
        echo isset($this->data[$name])?"Yes '$name' Property is set":"No '$name' Property is Not set";
        echo "\n";
    }

    public function __unset($name)
    {
        echo "Unsetting '$name'\n";
        unset($this->data[$name]);
    }

}


$obj = new PropertyTest;

$obj->a = "Masud Alam";
echo $obj->a . "\n";
echo isset($obj->a);
unset($obj->a);
echo isset($obj->a);
echo "\n";

?>

PHP Property Overloading unset Property Value

ব্যাখ্যা: লক্ষ্য করুন , লাইন নম্বর ৪২ এ ফাঙ্কশন unset() দিয়ে unknown property এর value unset করার জন্য call করি, আর unset () function call করার সাথে সাথে আমাদের class এর মধ্যে ২8 নম্বর লাইনে __unset() ফাঙ্কশনটি স্বয়ংক্রিয় ভাবে execute হয়। overloaded property গুলোর value unset করে।

Method Overloading কি?

class এর বাহির থেকে class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে class এর মধ্যে (যা পূর্ব থেকে define করা নাই এমন) যেকোনো Method তৈরী করার পদ্ধতিকে PHP Object Oriented Programming এর পরিভাষায় Method Over Loading বলা হয়। Method Overloading কে আমরা class ব্যবহারকারীর চাহিদা অনুযায়ী স্বয়ংক্রিয়ভাবে Method তৈরী করার পদ্ধতিও বলতে পারি।

PHP তে Method Overloading এ আমরা __call() function দিয়ে class এর বাহিরের থেকে Overloaded Method তৈরী করি এবং Overloaded Method এ Parameter set করি। এবং __callStatic() function দিয়ে class এর বাহিরের থেকে Overloaded static Method তৈরী করি এবং Overloaded static Method এ Parameter set করি

<?php
class MethodTest
{
    public function __call($name, $arguments)
    {
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
    }

    public static function __callStatic($name, $arguments)
    {
        echo "Calling static method '$name' "
             . implode(', ', $arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('in object context');

MethodTest::runTest('in static context');
?>

Zend Certified PHP Engineering (ZCPE) Course


নিচে Method Overloading feature ব্যবহার করে একটা CRUD উদহারণ দেওয়া হলো

<?php
class Db{
	private $conn;
	public function __construct($host,$user,$pass,$db){
		$this->conn=new mysqli($host,$user,$pass,$db);
		if($this->conn->connect_errno){
			die("Connection Fail for: ".$this->conn->connect_error);
		}
	}
	public function __call($method,$params){
		//echo $params[1];
		extract($params[0]);
		switch($action){
			case "read":
			if(isset($where)){
				$sql="SELECT $cols FROM $table WHERE $where";
				$result=$this->conn->query($sql);
				if($result->num_rows>0){
					return $result->fetch_assoc();
				}
			}
			else{
				$sql="SELECT $cols FROM $table";
				$result=$this->conn->query($sql);
				if($result->num_rows>0){
					return $result->fetch_all(MYSQLI_ASSOC);
				}
			}
			break;
			case "insert":
			$sql="INSERT INTO $table SET $cols";
			$result=$this->conn->query($sql);
			if($this->conn->affected_rows>0){
				return true;
			}
			break;
			case "update":
			$sql="UPDATE $table SET $cols WHERE $where";
			$result=$this->conn->query($sql);
			if($this->conn->affected_rows>0){
				return true;
			}
			break;
			case "delete":
			$sql="DELETE FROM $table WHERE $where";
			$result=$this->conn->query($sql);
			if($this->conn->affected_rows>0){
				return true;
			}
			break;
			default:
			return false;
			break;
		}
	}
		
}

$connect=new Db("localhost","root","","php85");
echo "<pre>";
print_r($connect->read(array("table"=>"students","cols"=>"*","action"=>"read")));
//print_r($connect->readAll(array("table"=>"students","cols"=>"*")));
/*print_r($connect->getById(array("table"=>"students","cols"=>"name,mobile","where"=>"id=19","action"=>"read")));*/
//echo $connect->Add(array("table"=>"students","cols"=>"name='Iftekhar',mobile='0122113323',address='Laxmipur,Bangladesh'","action"=>"insert"))?"Insert Success":"Insert Fail";

//echo $connect->removeData(array("table"=>"students","action"=>"delete","where"=>"id=19"))?"Delete Success":"Delete Fail";
echo "</pre>";

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply