Rector PHP: دليل شامل مع أمثلة عملية
Rector هي أداة قوية لإعادة هيكلة كود PHP بشكل تلقائي. إنها مكتبة تقوم بتحليل الكود الخاص بك باستخدام شجرة التركيب المجردة (AST) وتطبق قواعد تحويل محددة عليه. يتيح لك ذلك أتمتة المهام الروتينية لتحديث الكود، مثل الانتقال إلى إصدارات PHP الجديدة، وتطبيق ميزات اللغة الحديثة، وإصلاح البنى القديمة، وتحسين جودة الكود بشكل عام.
لماذا تحتاج إلى Rector؟ في تطوير PHP الحديث، تنمو المشاريع بسرعة ويصبح الحفاظ على تحديثها أكثر صعوبة. إعادة الهيكلة اليدوية لآلاف الأسطر من الكود هي عملية شاقة وعرضة للأخطاء. Rector يحل هذه المشكلة من خلال تمكين تحويلات معقدة في ثوانٍ. إنه مفيد بشكل خاص عند الترقية من PHP 7.x إلى 8.x، أو عند الانتقال من أطر العمل القديمة (مثل Zend Framework 1 إلى Laminas)، أو عند تطبيق الأنماط الحديثة والأنواع الصارمة.
يعمل Rector وفق مبدأ "مجموعة القواعد". أنت تحدد التحويلات التي تريد تنفيذها (مثل "استبدال جميع استدعاءات array_* بدوال str_*")، ويقوم Rector بالعثور على جميع الأماكن المناسبة في الكود وإجراء التغييرات. الأداة قابلة للتخصيص بالكامل: يمكنك استخدام مجموعات القواعد الجاهزة من المجتمع أو إنشاء قواعدك الخاصة. يتكامل Rector مع خطوط أنابيب CI/CD، مما يسمح بفحص وإصلاح الكود تلقائيًا مع كل commit.
التثبيت
يتم تثبيت Rector عبر Composer، مدير الحزم القياسي لـ PHP. قم بتنفيذ الأمر التالي في جذر مشروعك:
composer require rector/rector --dev
العلامة --dev تعني أنه سيتم تثبيت الحزمة للتطوير فقط، وهي ممارسة صحيحة لأن Rector غير مطلوب في بيئة الإنتاج.
بعد التثبيت، تحقق من أن كل شيء يعمل بشكل صحيح:
vendor/bin/rector --version
إذا كنت تستخدم تثبيتًا عامًا (غير موصى به للمشاريع)، يمكنك تنفيذ:
composer global require rector/rector
يتطلب Rector إصدار PHP 7.2 أو أعلى. يُوصى باستخدام PHP 8.0+ للحصول على أقصى أداء ودعم لجميع الميزات.
بداية سريعة: مثال عملي بسيط
لنقم بإنشاء ملف PHP بسيط يحتاج إلى إعادة هيكلة. لنفترض أن لدينا كودًا قديمًا يستخدم create_function()، والذي تمت إزالته في PHP 8.0.
الخطوة 1. قم بإنشاء ملف example.php:
<?php
$oldFunction = create_function('$a, $b', 'return $a + $b;');
echo $oldFunction(1, 2); // سيطبع 3
الخطوة 2. قم بإنشاء ملف الإعدادات rector.php في جذر المشروع:
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Php80\Rector\Function_\CreateFunctionToAnonymousFunctionRector;
return static function (RectorConfig $rectorConfig): void {
// تحديد المسارات التي سيتم تحليلها
$rectorConfig->paths([
__DIR__ . '/example.php',
]);
// تسجيل قاعدة استبدال create_function بدوال مجهولة
$rectorConfig->rule(CreateFunctionToAnonymousFunctionRector::class);
};
الخطوة 3. قم بتشغيل Rector:
vendor/bin/rector process --dry-run
العلامة --dry-run ستظهر التغييرات التي سيتم إجراؤها دون تطبيقها. لتطبيق التغييرات فعليًا على الملفات، قم بتنفيذ:
vendor/bin/rector process
النتيجة: سيتم تحويل ملف example.php إلى:
<?php
$oldFunction = function ($a, $b) {
return $a +