TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #46 840
‏Attributes ها، ابزاری قدرتمند برای افزودن اطلاعات متا داده به کدهای PHP هستند. این قابلیت برای انواع مختلفی از کاربردها از جمله سریالایزیشن، ولیدیشن، کانفیگیوریشن دیپندنسی‌ها، و مشخص کردن روت‌های API مفید است.

در PHP، چندین Attribute به طور پیشفرض تعریف شده است که برای استفاده‌های مختلف در فریمورک‌ها و کتابخانه‌ها مناسب هستند. این Attributes درونی به شما اجازه می‌دهند تا با استفاده از امکانات زبان، ویژگی‌هایی مانند تزریق وابستگی، سریال‌سازی داده‌ها، و کنترل دسترسی‌ها را به صورت بومی مدیریت کنید.

اما شما می توانید اتریبیوت های خود را نیز بسازید، ابتدا باید یک Attribute را تعریف کنید. تعریف یک Attribute به سادگی تعریف یک کلاس است که با نماد #[Attribute] مشخص شده است. سپس، این Attribute را می‌توانید به کلاس‌ها، متدها، فانکشن‌ها، پراپرتی‌ها، یا حتی پارامترها اختصاص دهید.

فرض کنید می‌خواهیم یک Attribute برای تعریف نویسنده‌ی یک کلاس یا متد داشته باشیم:
#[Attribute()]
class Author {
public function __construct(public string $name) {}
}


در این مثال، Author یک Attribute است که نام نویسنده را دریافت می‌کند. این Attribute را می‌توان برای کلاس‌ها و متدها استفاده کرد.

حال، فرض کنید می‌خواهیم این Attribute را به یک کلاس و متد اختصاص دهیم:
#[Author("John Doe")]
class SampleClass {
#[Author("Jane Doe")]
public function exampleMethod() {}
}


برای دسترسی و استفاده از مقادیر تعریف شده توسط Attributes، می‌توانید از Reflection API استفاده کنید. این API به شما امکان می‌دهد در زمان اجرا اطلاعات را استخراج کنید.
$reflectionClass = new ReflectionClass(SampleClass::class);
$classAttributes = $reflectionClass->getAttributes(Author::class);

foreach ($classAttributes as $attribute) {
$authorInstance = $attribute->newInstance();
echo "Class Author: " . $authorInstance->name . "\n";
}

$reflectionMethod = $reflectionClass->getMethod('exampleMethod');
$methodAttributes = $reflectionMethod->getAttributes(Author::class);

foreach ($methodAttributes as $attribute) {
$authorInstance = $attribute->newInstance();
echo "Method Author: " . $authorInstance->name . "\n";
}


در این مثال، از Reflection API استفاده شده است تا اطلاعات متا داده‌ای که به کلاس و متد اختصاص داده شده‌اند، استخراج شود. این تکنیک قابل استفاده برای انواع مختلفی از کاربردها در زمینه‌هایی مانند دیپندنسی اینجکشن، کانفیگوریشن سرویس‌ها و موارد دیگر است.

‏Attributes در PHP بر خلاف PHPDoc چیزی فراتر از کامنت‌ها هستند و به طور مستقیم توسط زبان تفسیر می‌شوند. در نسخه‌های قبلی PHP، توسعه‌دهندگان برای قرار دادن متادیتا به صورت کامنت‌هایی که به صورت دستی تفسیر می‌شدند (مانند PHPDoc) اتکا می‌کردند، اما Attributes در PHP 8 و بالاتر به گونه‌ای طراحی شده‌اند که به صورت بومی توسط زبان شناخته و مدیریت می‌شوند.

‏Attributes به شما این امکان را می‌دهند که اطلاعاتی را به اجزای مختلف کد مانند کلاس‌ها، توابع، پروپرتی‌ها، و پارامترها متصل کنید. این اطلاعات در زمان اجرا قابل استفاده هستند و می‌توانند توسط PHP و ابزارهایی که از Reflection API استفاده می‌کنند، خوانده شوند.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 7
  • 🔥 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →