أعلام الميزات في PHP: تشغيل الوظائف بدون ألم أو نشر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أعلام الميزات في PHP: تشغيل الميزات بدون نشر أو صلاة

\n\n

تخيل: لقد أطلقت ميزة جديدة — وكل شيء تعطل. الموقع توقف، العملاء في ذعر، المطورون يحكون رؤوسهم. مألوف؟ والآن تخيل أنه يمكنك تشغيل هذه الميزة فقط لـ 5% من المستخدمين، ومشاهدة المقاييس، وإذا حدث خطأ ما — فقط اضغط على مفتاح وارجع للخلف. بدون نشر، بدون commits، بدون ألم. هذا ليس سحرًا، إنها أعلام الميزات في PHP.

\n\n

أعلام الميزات (المعروفة أيضًا باسم feature flags أو feature toggles) هي تقنية تسمح لك بتشغيل وإيقاف وظائف التطبيق دون تغيير الكود أو إعادة النشر. يبدو وكأنها قوة خارقة؟ هذا صحيح. في هذه المقالة، سنشرح كيفية تطبيق إدارة الوظائف في PHP في مشاريع حقيقية: من إعدادات بسيطة إلى التكامل مع Symfony و Laravel. هيا بنا!

\n\n

لماذا تحتاج أعلام الميزات في مشاريع PHP؟

\n\n

لنفترض أنك تبني متجرًا إلكترونيًا باستخدام PHP. يطلب منك العميل إضافة بوابة دفع جديدة. تكتب الكود، وتختبره محليًا، ولكن في الإنتاج — مفاجأة: البوابة تعمل بشكل غير مستقر. عادةً ما يعني هذا: إصلاح عاجل، نشر ليلي، مدير فريق متوتر. مع أعلام الميزات، الأمر مختلف تمامًا. أنت ببساطة تقوم بإيقاف العلم، وتستمر بوابة الدفع القديمة في العمل بينما تقوم بهدوء بإصلاح الخلل.

\n\n

متى تكون أعلام الميزات مفيدة بشكل خاص:

\n
    \n
  • الإصدارات التجريبية (Canary releases) — تشغيل الميزة لـ 1% من المستخدمين، ثم لـ 10%، ثم للجميع.
  • \n
  • اختبار A/B — عرض وظائف مختلفة لمجموعات مختلفة ومقارنة معدل التحويل.
  • \n
  • إيقاف الوظائف المعطلة — خطأ في الإنتاج؟ أوقف العلم دون التراجع عن الإصدار بأكمله.
  • \n
  • الطرح التدريجي — إطلاق الميزة تدريجيًا لتجنب تحميل الخوادم.
  • \n
\n\n

والأهم من ذلك: أعلام الميزات في PHP تقلل من مخاطر النشر. تتوقف عن الخوف من الـ commit مساء الجمعة (حسنًا، تقريبًا).

\n\n

أبسط تطبيق: ملف الإعدادات

\n\n

لنبدأ من الأساس. الطريقة الأسهل هي تخزين الأعلام في ملف إعدادات. على سبيل المثال، في شكل مصفوفة PHP أو JSON.

\n\n
// config/features.php\nreturn [\n    'new_checkout' => false,\n    'dark_mode'    => true,\n    'ai_recommendations' => false,\n];\n
\n\n

استخدامها في الكود:

\n\n
// src/CheckoutService.php\n$features = require __DIR__ . '/config/features.php';\n\nif ($features['new_checkout']) {\n    // منطق جديد لإتمام الطلب\n    $this->processWithNewGateway();\n} else {\n    // منطق قديم\n    $this->processWithOldGateway();\n}\n
\n\n

العيب واضح: لتغيير العلم، تحتاج إلى تعديل الملف على الخادم. هذا غير مريح وغير آمن. لكن للمشاريع الصغيرة — يكفي. المهم أنك فهمت المبدأ: أعلام الميزات في PHP هي مجرد عبارات شرطية مرتبطة بمخزن خارجي.

\n\n

مستوى متقدم: التخزين في قاعدة البيانات

\n\n

عندما ينمو المشروع، يصبح ملف الإعدادات عنق زجاجة. تريد إدارة الأعلام من خلال لوحة التحكم. هنا تأتي قاعدة البيانات للإنقاذ.

\n\n

ننشئ جدولًا بسيطًا:

\n\n
CREATE TABLE feature_flags (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    name VARCHAR(100) UNIQUE NOT NULL,\n    enabled TINYINT(1) DEFAULT 0,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n
\n\n

ونكتب خدمة بسيطة للتعامل مع الأعلام:

\n\n
class FeatureFlagService\n{\n    private PDO $pdo;\n    private array $cache = [];\n\n    public function __construct(PDO $pdo)\n    {\n        $this->pdo = $pdo;\n    }\n\n    public function isEnabled(string $flagName): bool\n    {\n        if (!isset($this->cache[$flagName])) {\n            $stmt = $this->pdo->prepare(\n                'SELECT enabled FROM feature_flags WHERE name = ?'\n            );\n            $stmt->execute([$flagName]);\n            $row = $stmt->fetch(PDO::FETCH_ASSOC);\n            $this->cache[$flagName]                

المدونات

توصيات الكتب