أعلام الميزات في PHP: كيف تتوقف عن الخوف وتبدأ في تفعيل الميزات

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

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

ابدأ الدورة

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

\n\n

تخيل: لقد كتبت ميزة جديدة - نظام توصيات فائق. تم اختبار كل شيء على جهازك المحلي، ولكن بمجرد وصول الكود إلى بيئة الإنتاج، تبدأ الفوضى. المستخدمون غاضبون، معدل التحويل ينخفض، وأنت تتراجع عن التغييرات بشكل محموم. هل يبدو الأمر مألوفًا؟

\n\n

والآن تخيل سيناريو آخر. تقوم بنشر نفس الميزة، لكنها معطلة افتراضيًا. تقوم بتفعيلها لـ 5% من المستخدمين، تراقب المقاييس، ثم تنشرها أكثر. إذا حدث خطأ ما - فقط قم بتعطيلها بنقرة واحدة. بدون نشر. بدون توتر. هذا هو سحر أعلام الميزات (تُعرف أيضًا بمفاتيح الميزات، أعلام الوظائف).

\n\n

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

\n\n

ما هي أعلام الميزات ولماذا يحتاجها مطور PHP؟

\n\n

علم الميزة (فيشة فلاج) هو مفتاح برمجي يسمح لك بتشغيل أو إيقاف وظائف التطبيق دون تغيير الكود أو إعادة النشر. ببساطة: تكتب الكود مرة واحدة، وتقرر ما إذا كنت تريد عرضه للمستخدم أم لا بشكل فوري.

\n\n

أفضل 3 أسباب لاستخدام أعلام الوظائف في PHP:

\n
    \n
  • النشر الآمن: يمكنك نشر الكود في أي وقت من اليوم. إذا حدث خطأ - فقط قم بإيقاف العلم.
  • \n
  • اختبار A/B: عرض إصدارات مختلفة من الواجهة لشرائح مختلفة من المستخدمين ومقارنة المقاييس.
  • \n
  • الإصدارات التجريبية (Canary releases): نشر الميزة الجديدة أولاً على 1% من الجمهور، ثم 10%، ثم 100%.
  • \n
\n\n
«أعلام الميزات تشبه مفتاح الضوء. يمكنك تشغيله للغرفة بأكملها، أو لزاوية واحدة فقط. ولست بحاجة إلى إعادة توصيل الأسلاك في كل مرة».
\n\n

أبسط تطبيق لأعلام الميزات في PHP

\n\n

لنبدأ بأبسط خيار عملي. لنفترض أن لدينا ملف config.php يخزن جميع الأعلام:

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

والآن فئة بسيطة للتحقق من الأعلام:

\n\n
<?php\nclass FeatureFlagManager\n{\n    private array $features;\n\n    public function __construct(array $config)\n    {\n        $this->features = $config['features'] ?? [];\n    }\n\n    public function isEnabled(string $flag): bool\n    {\n        return $this->features[$flag] ?? false;\n    }\n}\n\n// الاستخدام:\n$manager = new FeatureFlagManager(require 'config.php');\n\nif ($manager->isEnabled('dark_mode')) {\n    echo '<link rel="stylesheet" href="dark.css">';\n}\n
\n\n

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

\n\n

أعلام الميزات الديناميكية مع التخزين في قاعدة البيانات

\n\n

النمط الأكثر شيوعًا هو تخزين حالات الأعلام في قاعدة بيانات أو Redis. عندها يمكن تغييرها من خلال لوحة الإدارة دون إعادة تشغيل التطبيق.

\n\n

هيكل جدول MySQL

\n\n
CREATE TABLE feature_flags (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    flag_name VARCHAR(100) UNIQUE NOT NULL,\n    is_enabled TINYINT(1) DEFAULT 0,\n    description TEXT,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n
\n\n

فئة للعمل مع قاعدة البيانات

\n\n
<?php\nclass DbFeatureFlags\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 $fla                

المدونات

توصيات الكتب