تا اینجا درمورد آنالیزور های استاتیک صحبت کردیم و گزینه های مختلفی که وجود داشت رو باهم مقایسه کردیم. حالا سوال بعدی اینه که چه کاری از دست آنالیزور های استاتیک بر میاد؟
یک نمونه رو قبلا باهم دیدیم که آنالیزور استاتیک بهتون می گفت ورودی اشتباهی رو به تابع دادین:
function foo(array $input): void {}
foo('wrong input');
Error: Argument 1 of foo expects array, "wrong input" provided
برای نمونه Psalm بهتون میگه $input توی تابع هرگز استفاده نشده:
function foo(array $input): void {}
Info: Param $input is never referenced in this method
اینجا بهتون میگه بلاک elseif هیچوقت اجرا نمیشه:
$condition = /* یک عبارت شرطی*/;
if ($condition) {
// …
} elseif ($condition) {
// …
}
Error: Elseif condition is always false.
این نمونه ها محدودن اما در نظر داشته باشین که Psalm و PHPStan تمام کد های شما رو یکجا بررسی می کنن. اونا می تونن مشکل ها رو بین فایل ها، داخل ساختار های تو در تو و... تشخیص بدن.
آنالیزور های استاتیک جایی خودشون رو به خوبی نشون میدن که ذهن انسان به خاطر وجود کد های زیاد، کاری از دستش بر نمیاد.
قبل تر هم گفتم که آنالیزور های استاتیک به شدت روی سیستم type پی اچ پی حساب باز می کنن تا بتونن بیشترین اطلاعات ممکن رو از کدهای شما بدست بیارن. حتا جاهایی که از type استفاده نشده به شما خطا نشون میدن.
class Post {
public function title() { /* … */ }
}
Error: Method Post::title() has no return type specified.
علاوه بر این، Psalm و PHPStan سیستم type پی اچ پی رو گسترش دادن تا بتونن ارزیابی پیچیده تری داشته باشن. این کار رو با اضافه کردن dockblock های جدید انجام میدن. میتونین مستند های Psalm و PHPStan رو در این مورد مطالعه کنین.
با این کار قفل قابلیت های جالبی باز میشه.برای نمونه این که یک رشته اسم کلاسه، اینکه callable هست و حتی generic ها هم پشتیبانی میشن. بیشتر این قابلیت ها رو تو این مجموعه مطالب باهم بررسی خواهیم کرد.
شاید توی این مطلب ها نشه به خوبی قدرت آنالیز استاتیک توی پروژه های بزرگ (واقعی) رو نشون داد. توی پروژه هایی که سال هاست روی اونها کار میشه و تعداد زیادی توسعه دهنده دارن هرچه بیشتر کار ها اتوماتیک بشه بهتره. به نظر من آنالیز استاتیک توی این پروژه ها نقش مهمی ایفا می کنه.
شاید همین الان روی پروژه بزرگی کار می کنین. بهتون پیشنهاد می کنم Psalm یا PHPStan رو امتحان کنین و اگه دوست داشتین زیر این مطلب بنویسین چه خطا هایی توی پروژتون پیدا شد. البته بهتره بدونین که شاید اضافه کردن آنالیزور استاتیک به پروژه فعلیتون کمی خسته کننده باشه چون اولش کلی خطا بهتون نشون میده. اما نگران نباشین! این مشکل رو تو مطلب بعدی حل می کنیم.