ভূমিকা
অন্যান্য অবজেক্ট-অরিয়েন্টেড ভাষা যেমন C++ বা Java-তে ওভারলোডিং-এর ব্যাখ্যা PHP-এর তুলনায় ভিন্ন। সেখানে ওভারলোডিং বলতে একই নামে একাধিক মেথড থাকতে পারে কিন্তু আর্গুমেন্ট বা রিটার্ন টাইপ ভিন্ন। PHP-তে অন্যদিকে, গতিশীলভাবে প্রপার্টি এবং মেথড তৈরি করার বৈশিষ্ট্যটিই ওভারলোডিং নামে পরিচিত। PHP-এর ম্যাজিক মেথড (ডাবল আন্ডারস্কোর দিয়ে শুরু হওয়া মেথডের নাম) গতিশীল প্রপার্টি এবং মেথড সেট আপ করতে ব্যবহৃত হয়।
প্রপার্টি ওভারলোডিং-এর জন্য নিম্নলিখিত ম্যাজিক মেথডগুলো ব্যবহৃত হয়:
সিনট্যাক্স
public __set ( string $name , mixed $value ) : void public __get ( string $name ) : mixed public __isset ( string $name ) : bool public __unset ( string $name ) : void
__set() প্রোতেক্টেড, প্রাইভেট বা অস্তিত্বহীন প্রপার্টিতে ডেটা লিখতে ব্যবহৃত হয়।
__get() অ্যাক্সেস করা যাচ্ছে না এমন প্রপার্টি থেকে ডেটা পড়ে।
__isset() অ্যাক্সেস করা যাচ্ছে না এমন প্রপার্টিতে isset() বা empty() কল করার সময় ট্রিগার হয়।
__unset() অ্যাক্সেস করা যাচ্ছে না এমন প্রপার্টিতে unset() কল করার সময় আহ্বান করা হয়।
নিচের কোডে, myprop নামক একটি গতিশীল প্রপার্টি সেট, রিট্রিভ এবং আনসেট করা হয়েছে:
উদাহরণ
<?php
class myclass{
public function __set($name, $value){
echo "setting $name property to $value \n";
$this->$name = $value;
}
public function __get($name){
echo "value of $name property is ";
return $this->$name;
}
public function __isset($name){
return isset($this->$name);
}
public function __unset($name){
unset($this->$name);
}
}
$obj = new myclass();
$obj->myprop="test";
echo $obj->myprop . "\n";
var_dump (isset($obj->myprop));
unset($obj->myprop);
var_dump (isset($obj->myprop));
?>
আউটপুট
আউটপুট নিচের মতো হবে:
setting myprop property to test test bool(true) bool(false)
মেথড ওভারলোডিং
মেথড গতিশীলভাবে সেট করার জন্য দুটি ম্যাজিক মেথড ব্যবহৃত হয়: __call() এবং __callStatic()
public __call ( string $name , array $arguments ) : mixed public static __callStatic ( string $name , array $arguments ) : mixed
__call() অবজেক্ট কনটেক্সটে অ্যাক্সেস করা যাচ্ছে না এমন মেথড আহ্বান করার সময় ট্রিগার হয়।
__callStatic() স্ট্যাটিক কনটেক্সটে অ্যাক্সেস করা যাচ্ছে না এমন মেথড আহ্বান করার সময় ট্রিগার হয়।
নিচের উদাহরণটি PHP-তে মেথড ওভারলোডিং প্রদর্শন করে:
উদাহরণ
<?php
class myclass{
public function __call($name, $args){
// নোট: $name-এর মান কেস-সংবেদনশীল।
echo "Calling object method $name with " . implode(" ", $args). "\n";
}
public static function __callStatic($name, $args){
echo "Calling static method $name with " . implode(" ", $args). "\n";
}
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>
আউটপুট
উপরোক্ত কোড নিচের ফলাফল তৈরি করে:
Calling object method mymethod with Hello World! Calling static method mymethod with Hello World!