ভূমিকা
ভূমিকা
নাম অনুযায়ী, অ্যানোনিমাস ক্লাস হলো যার কোনো নাম নেই। এটি একবারের ব্যবহারের জন্য এবং অনাই-তে একটি ক্লাস ডিফাইন করতে চাইলে। অ্যানোনিমাস ক্লাসের বৈশিষ্ট্য PHP 7 সংস্করণ থেকে পরিচয় করানো হয়েছে।
অ্যানোনিমাস ক্লাসের ডেফিনিশন একটি এক্সপ্রেশনের ভিতরে থাকে যার ফলাফল হলো সেই ক্লাসের একটি অবজেক্ট। এটি new class সিনট্যাক্স দিয়ে ডিফাইন করা হয়:
সিনট্যাক্স
<?php
$obj=new class {
public function sayhello(){
echo "Hello World";
}
};
$obj->sayhello();
?>
অ্যানোনিমাস ক্লাস একটি সাধারণ ক্লাসের সব কাজ করতে পারে অর্থাৎ অন্য ক্লাস এক্সটেন্ড করতে পারে, ইন্টারফেস ইমপ্লিমেন্ট করতে পারে বা ট্রেইট ব্যবহার করতে পারে।
নিচের কোডে, একটি অ্যানোনিমাস ক্লাস parentclass এক্সটেন্ড করে এবং parentinterface ইমপ্লিমেন্ট করে:
উদাহরণ
<?php
class parentclass{
public function test1(){
echo "test1 method in parent class\n";
}
}
interface parentinterface{
public function test2();
}
$obj=new class() extends parentclass implements parentinterface {
public function test2(){
echo "implements test2 method from interface";
}
};
$obj->test1();
$obj->test2();
?>
আউটপুট
আউটপুট নিচের মতো:
test1 method in parent class
implements test2 method from interface
নেস্টেড অ্যানোনিমাস ক্লাস
অ্যানোনিমাস ক্লাস অন্য ক্লাসের মেথডের বডির ভিতরে নেস্টেড হতে পারে। তবে, এর অবজেক্ট আউটার ক্লাসের প্রাইভেট বা প্রোটেক্টেড মেম্বার অ্যাক্সেস করতে পারে না।
উদাহরণ
<?php
class testclass{
public function test1(){
return new class(){
public function test2(){
echo "test2 method of nested anonymous class";
}
};
}
}
$obj2=new testclass();
$obj2->test1()->test2();
?>
আউটপুট
উপরোক্ত কোড নিচের ফলাফল তৈরি করে:
test2 method of nested anonymous class
অ্যানোনিমাস ক্লাসের ইন্টারনাল নাম
PHP পার্সার অ্যানোনিমাস ক্লাসের জন্য ইন্টারনাল ইউজের জন্য একটি অনন্য নাম দেয়।
উদাহরণ
<?php
var_dump(get_class(new class() {} ));
?>
আউটপুট
এটি নিচের মতো আউটপুট তৈরি করবে:
string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"
ভূমিকা
নাম অনুযায়ী, অ্যানোনিমাস ক্লাস হলো যার কোনো নাম নেই। এটি একবারের ব্যবহারের জন্য এবং অনাই-তে একটি ক্লাস ডিফাইন করতে চাইলে। অ্যানোনিমাস ক্লাসের বৈশিষ্ট্য PHP 7 সংস্করণ থেকে পরিচয় করানো হয়েছে।
অ্যানোনিমাস ক্লাসের ডেফিনিশন একটি এক্সপ্রেশনের ভিতরে থাকে যার ফলাফল হলো সেই ক্লাসের একটি অবজেক্ট। এটি new class সিনট্যাক্স দিয়ে ডিফাইন করা হয়:
সিনট্যাক্স
<?php
$obj=new class {
public function sayhello(){
echo "Hello World";
}
};
$obj->sayhello();
?>
অ্যানোনিমাস ক্লাস একটি সাধারণ ক্লাসের সব কাজ করতে পারে অর্থাৎ অন্য ক্লাস এক্সটেন্ড করতে পারে, ইন্টারফেস ইমপ্লিমেন্ট করতে পারে বা ট্রেইট ব্যবহার করতে পারে।
নিচের কোডে, একটি অ্যানোনিমাস ক্লাস parentclass এক্সটেন্ড করে এবং parentinterface ইমপ্লিমেন্ট করে:
উদাহরণ
<?php
class parentclass{
public function test1(){
echo "test1 method in parent class\n";
}
}
interface parentinterface{
public function test2();
}
$obj=new class() extends parentclass implements parentinterface {
public function test2(){
echo "implements test2 method from interface";
}
};
$obj->test1();
$obj->test2();
?>
আউটপুট
আউটপুট নিচের মতো:
test1 method in parent class implements test2 method from interface
নেস্টেড অ্যানোনিমাস ক্লাস
অ্যানোনিমাস ক্লাস অন্য ক্লাসের মেথডের বডির ভিতরে নেস্টেড হতে পারে। তবে, এর অবজেক্ট আউটার ক্লাসের প্রাইভেট বা প্রোটেক্টেড মেম্বার অ্যাক্সেস করতে পারে না।
উদাহরণ
<?php
class testclass{
public function test1(){
return new class(){
public function test2(){
echo "test2 method of nested anonymous class";
}
};
}
}
$obj2=new testclass();
$obj2->test1()->test2();
?>
আউটপুট
উপরোক্ত কোড নিচের ফলাফল তৈরি করে:
test2 method of nested anonymous class
অ্যানোনিমাস ক্লাসের ইন্টারনাল নাম
PHP পার্সার অ্যানোনিমাস ক্লাসের জন্য ইন্টারনাল ইউজের জন্য একটি অনন্য নাম দেয়।
উদাহরণ
<?php
var_dump(get_class(new class() {} ));
?>
আউটপুট
এটি নিচের মতো আউটপুট তৈরি করবে:
string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"