PHP OOP তে Anonymous Class কি?
nonymous শব্দের অর্থ হচ্ছে নাম বিহীন বা বেনামী, আর anonymous class মানে হচ্ছে নাম বিহীন class বা বেনামী class, সুতরাং PHP OOP তে যখন কোনো class declare বা ঘোষণা করা হয়, কিন্তু class টির কোনো নাম থাকেনা, PHP OOP তে সেই class কে anonymous class বলে।
Anonymous Class বুঝার জন্য প্রথমে আমরা একটা সাধারণ Class তৈরী করি।
<?php
class Test{
public function log(){
return "This is not a love songn";
}
}
$obj=new Test;
echo $obj->log();
?>
Result:
This is not a love song
উপরের class টিকেই anonymous class হিসেবে নিচের মতো declare এবং call করতে পারি।
নোট : anonymous class অবশ্যই semi-colon (;) দিয়ে শেষ করতে হয়।
<?php
// Example of a single use anonymous class
$test = (new class {
public function log()
{
// echo the log message
return "This is not a love songn";
}
});
// call the log function within the anonymous class.
echo $test->log( "This is not a love songn" );
?>
Result:
This is not a love song
Anonymous Class এ Arguments পাঠানোর উপায়:
সাধারণ class এর মতো Anonymous Class এ Arguments পাঠানোর নিয়ম প্রায় একই। নিচের উদাহরণটি দেখুন:
<?php
// a message to pass to the constructor
$message = "This is a log messagen";
// create a new anonymous class, and pass the message as an arguement to the constructor
$test = (new class( $message ) {
public function __construct( $message )
{
// echo the message
echo $message;
}
public function log($msg){
return $msg;
}
});
echo $test->log("This is not a love song!");
?>
Result:
This is not a love song!
ব্যাখ্যা : উপরের কোডে আমরা $message variable কে Anonymous class এর Constructor Method এর value হিসেবে পাঠানোর জন্য class keyword এর পর first bracket এর মধ্যে পাঠিয়ে দিয়েছি। একই ভাবে সাধারণ অন্যান্য class এর Method যেভাবে Argument Pass করি , log Method এ ও আমরা একই ভাবে argument pass করেছি।
অন্য class থেকে Anonymous Class তৈরী বা Extend , Interface Implement এবং Trait এর Use:
আপনি চাইলে যেকোনো parent class কে Inherit করে Anonymous Class তৈরী করতে পারেন, একই সাথে interface Implement এবং trait use করতে পারেন। নিচের উদাহরণটি দেখুন:
<?php
/**
* Interface that will be implement
*/
interface testInterface{
public function getMessage();
}
/**
* Trait that will be Used
*/
trait testTrait{
public function sayHello(){
return "<br>Hello I'm From Trait";
}
}
/**
* Class that will be extended
*/
class myClass{
public function __construct( $message ){
// echo the message
echo $message;
}
}
// a message to pass to the constructor
$message = "This class extends myClassn";
// a new anonymous class, which extends the myClass class.
$test = (new class( $message ) extends myClass implements testInterface{
public function log( $msg ){
return $msg;
}
public function getMessage(){
return "<br>I am actually from a Interface";
}
use testTrait;
});
echo $test->log("This is not a Love Song!");
echo $test->getMessage();
echo $test->sayHello();
?>
Result:
This class extends myClass This is not a Love Song! I am actually from a Interface Hello I'm From Trait