کلاس بی نام یا anonymous در php 7

ارسال شده توسط: حسین درویشی Comments: 0

کلاس بی نام یا anonymous در php 7

یکی از مقوله های بسیار مهم در بحث شی گرایی کلاس بی نام هستند. کلاس های بی نام برای تولید کلاس های فرزند کاربرد دارند. زبان های گوناگونی از این نوع کلاس پشتیبانی می کنند و زبان php هم یکی از آنهاست. عنوان اصلی این مقاله در رابطه با کلاس بی نام در php است. یا اصطلاحاً anonymous class در php 7

کلاس فرزند بی نام در پی اچ پی

کلاس بی نام یکی از قابلیت هایی است که توسط زبان های مختلفی پشتیبانی می شود. زبان، نسخه 7 و بالاتر از این نوع کلاس پشتیبانی می کند.

کلاس های بی نام کلاس هایی هستند که ذاتاً کلاس فرزند هستند و نامی ندارند. استفاده از این نوع کلاس صرفاً به منظور Override کردن متدهای کلاس والد است. یعنی در کلاس های بی نام یا anonymous class نمی توان متد یا فیلد جدیدی تعریف کرد. اما بر خلاف سایر زبان ها، در پی اچ پی این محدودیت وجود ندارد و می توان تابع جدیدی در کلاس فرزند بی نام تعریف کرد.

<?php
class Test
{
public function show()
{
echo 'hello' . '<br/>';
}
}
$t = new class extends Test
{
public function show()
{
echo 'hey' . '<br/>';
}
public function nameShow($name){
echo $name;
}
};
$t1 = new Test();
$t1->show();
$t->show().' '.$t->nameShow('ali');
//output:
//hello
//hey ali

کلاس anonymous در php ، روشی برای توسعه کلاس ها در زمان اجرا می باشد.

یک مثال از anonymous class در زبان PHP 7

<?php
class Test
{
public function show()
{
echo 'hello' . '<br/>';
}
}
$t = new class extends Test
{
public function show()
{
echo 'hey' . '<br/>';
}
};
$t1 = new Test();
$t1->show();
$t->show();
//output:
//hello
//hey

مثال بالا یک کلاسی با نام Test داشته و دارای یک تابع به نام show می باشد. در پایین نیز از همین کلاس، یک anonymous class ساخته شده است. کلمه کلیدی extends در استفاده از این کلاس ها نیاز است، چون این نوع کلاس ها کلاس فرزند بی نام نامیده می شوند.

علاوه بر اینکه کلاس بی نام می تواند متدهای کلاس فرزند را Override کند، این نوع کلاس ها می توانند از کلاس های Interface نیز ارث بری کنند.

<?php
class Test
{
public function show()
{
echo 'hello' . '<br/>';
}
}
interface InterfaceClass
{
public function print();
}
$t = new class extends Test implements InterfaceClass
{
public function show()
{
echo 'hey' . '<br/>';
}
public function print()
{
echo 'hi';
}
};
$t1 = new Test();
$t1->show();
$t->show();
$t->print();
//output:
//hello
//hey
//hi

ارث بری از کلاس interface صرفاً با کلمه کلیدی implements امکان پذیر است.

نکته:

این تغییرات صرفاً در آن شی مورد نظر لحاظ می شود و اشیایی بعدی که تعریف می شوند همانند کلاس اصلی خواهند بود همچنین تغییرات داده شده به هیج وجه در کلاس منعکس نمی گردد.

برای امتیاز به این نوشته کلیک کنید!
[کل: 1 میانگین: 5]

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *