حتى لو قمت بتطوير برنامج PHP جديد واسع النطاق، فسوف تستخدم حتمًا البيانات العالمية، لأنه سيتم استخدام بعض البيانات في أجزاء مختلفة من التعليمات البرمجية الخاصة بك. تتضمن بعض البيانات العالمية الشائعة: فئات إعداد البرامج، وفئات اتصال قاعدة البيانات، ومعلومات المستخدم، وما إلى ذلك. هناك العديد من الطرق لجعل هذه البيانات بيانات عالمية، وأكثرها استخدامًا هو استخدام إعلان الكلمات الرئيسية "العام"، والذي سنشرحه بالتفصيل لاحقًا في المقالة.
العيب الوحيد لاستخدام الكلمة الأساسية "العالمية" للإعلان عن البيانات العالمية هو أنها في الواقع طريقة سيئة جدًا للبرمجة، وغالبًا ما تؤدي إلى مشاكل أكبر لاحقًا في البرنامج، لأن البيانات العالمية تفصل بين التعليمات البرمجية الخاصة بك وجميع أجزاء التعليمات البرمجية مرتبطة معًا، لذلك إذا قمت بتغيير جزء واحد من الكود، فقد يتسبب ذلك في حدوث خطأ في الأجزاء الأخرى. لذلك، إذا كان هناك العديد من المتغيرات العامة في التعليمات البرمجية الخاصة بك، فسيكون من الصعب صيانة البرنامج بأكمله.
ستوضح هذه المقالة كيفية منع مشكلة المتغير العام هذه من خلال تقنيات أو أنماط تصميم مختلفة. بالطبع، دعونا أولاً نرى كيفية استخدام الكلمة الأساسية "العالمية" للبيانات العالمية وكيف تعمل. باستخدام المتغيرات العامة والكلمة الأساسية "العالمية"،
تحدد PHP بعض متغيرات "Superglobals" بشكل افتراضي، ويتم تعميم هذه المتغيرات تلقائيًا ويمكن استدعاؤها في أي مكان في البرنامج، مثل $_GET و$_REQUEST، وما إلى ذلك. وعادة ما تأتي من بيانات أو بيانات خارجية أخرى، واستخدام هذه المتغيرات عادة لا يسبب مشاكل لأنها في الأساس غير قابلة للكتابة.
ولكن يمكنك استخدام المتغيرات العالمية الخاصة بك. باستخدام الكلمة الأساسية "عامة"، يمكنك استيراد البيانات العامة إلى النطاق المحلي للوظيفة. إذا كنت لا تفهم "نطاق الاستخدام المتغير"، فيرجى الرجوع إلى التعليمات ذات الصلة في دليل PHP.
ما يلي هو مثال توضيحي باستخدام الكلمة الأساسية "العامة":
فيما يلي المحتوى المقتبس:
<?php
$my_var = 'مرحبا بالعالم';
test_global();
وظيفة test_global() {
// الآن في النطاق المحلي
// المتغير $my_var غير موجود
// ينتج خطأ: "متغير غير محدد: my_var"
صدى $my_var;
// الآن دعونا نهتم بالمتغير
عالمي $my_var؛
// يعمل:
صدى $my_var;
}
?>
كما ترون في المثال أعلاه، يتم استخدام الكلمة الأساسية "العالمية" لاستيراد المتغيرات العامة. يبدو أنها تعمل بشكل جيد وبسيط، فلماذا نقلق بشأن استخدام الكلمة الأساسية "العالمية" لتحديد البيانات العالمية؟
فيما يلي ثلاثة أسباب وجيهة:
1. يكاد يكون من المستحيل إعادة استخدام التعليمات البرمجية
إذا كانت الوظيفة تعتمد على متغيرات عامة، فمن المستحيل تقريبًا استخدام هذه الوظيفة في بيئات مختلفة. هناك مشكلة أخرى وهي أنه لا يمكنك استخراج هذه الوظيفة واستخدامها في تعليمات برمجية أخرى.
2. يعد تصحيح الأخطاء وحل المشكلات أمرًا صعبًا للغاية.
يعد تتبع المتغير العام أصعب بكثير من تتبع المتغير غير العام. يمكن إعادة تعريف متغير عام في بعض ملفات التضمين الغامضة، وحتى إذا كان لديك محرر برنامج جيد جدًا (أو IDE) لمساعدتك، فقد يستغرق الأمر عدة ساعات لاكتشاف المشكلة.
3. سيكون من الصعب جدًا فهم هذه الرموز،
ومن الصعب عليك معرفة من أين يأتي المتغير الشامل وفي أي غرض يتم استخدامه. أثناء عملية التطوير، قد تعرف كل المتغيرات العالمية، ولكن بعد حوالي عام، قد تنسى بعضها على الأقل. في هذا الوقت، ستندم على استخدام الكثير من المتغيرات العالمية.
إذن، إذا لم نستخدم المتغيرات العالمية، فماذا نستخدم؟ دعونا نلقي نظرة على بعض الحلول أدناه.
استخدام معلمات الدالة
إحدى الطرق للتوقف عن استخدام المتغيرات العامة هي ببساطة تمرير المتغير كمعلمة إلى الدالة، كما هو موضح أدناه:
وفيما يلي محتوى الاقتباس:
<?php
$var = 'مرحباً بالعالم';
اختبار ($فار)؛
اختبار الوظيفة($var) {
صدى $var;
}
>
إذا كنت تحتاج فقط إلى تمرير متغير عام، فهذا حل جيد جدًا أو حتى متميز، ولكن ماذا لو كنت تريد تمرير العديد من القيم؟
على سبيل المثال، لنفترض أننا نريد استخدام فئة قاعدة البيانات، وفئة إعدادات البرنامج، وفئة المستخدم. في الكود الخاص بنا، يتم استخدام هذه الفئات الثلاث في جميع المكونات، لذلك يجب تمريرها إلى كل مكون. إذا استخدمنا طريقة معلمة الوظيفة، فيجب علينا القيام بذلك:
وفيما يلي المحتوى المقتبس:
<?php
$db = DBConnection جديد؛
إعدادات $ = إعدادات جديدة_XML؛
مستخدم $ = مستخدم جديد؛
اختبار($db, $settings, $user);
اختبار الوظيفة(&$db, &$settings, &$user) {
// افعل شيئا
}
?>
من الواضح أن هذا لا يستحق كل هذا العناء، وبمجرد أن يكون لدينا كائنات جديدة لإضافتها، يتعين علينا إضافة معلمة دالة أخرى إلى كل دالة. لذلك علينا استخدام طريقة أخرى لحلها.