مجالات الأسماء في PHP

من موسوعة حسوب
< PHP
مراجعة 03:32، 4 أبريل 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - 'PHP/Namespaces/importing' ب'PHP/namespaces')

ما هي مجالات الأسماء؟ التعريف الواسع لمجالات الأسماء هو: طريقة لتغليف العناصر، ويمكن رؤية هذا الأمر كمفهوم مجرد في عدة أماكن. فعلى سبيل المثال، تعمل المجلدات في أنظمة التشغيل المختلفة على تجميع الملفات المرتبطة ببعضها البعض، وهي بمثابة مجال أسماء لتلك الملفات. لنأخذ المثال التالي للتوضيح: يمكن أن يكون الملف foo.txt موجودًا في كلا المجلدين ‎/home/greg و ‎/home/other ولكن لا يمكن لنسختين من هذا الملف أن تكونا في المجلد ذاته، وإضافة لذلك يتطلب الوصول إلى الملف foo.txt من خارج المجلد ‎/home/greg إضافة اسم المجلّد إلى اسم الملف باستخدام فاصل المجلدات للحصول على المسار ‎/home/greg/foo.txt. وهذا المبدأ مشابه لمفهوم مجالات الأسماء في عالم البرمجة.

الإصدار الوصف
7.0.0 Added Group use Declarations

صُمِّمت مجالات الأسماء في لغة PHP لحل مشكلتين تواجهان أصحاب مكتبات وتطبيقات PHP عند كتابة شيفرات تتضمن عناصر قابلة لإعادة الاستخدام مثل الأصناف والدوال:

  1. التضارب الحاصل بين الشيفرة المكتوبة وبين الأصناف والدوال والثوابت الداخلية الخاصة باللغة أو الخاصة بالطرف الثالث (أصحاب المكتبات والملحقات).
  2. القدرة على اختصار (أو تقصير) الأسماء الطويلة جدًّا والتي وضعت للتخفيف من المشكلة الأولى وزيادة مقروئية الشيفرة المصدرية.

تقدّم مجالات الأسماء في PHP وسيلة لتجميع الأصناف والواجهات والدوال والثوابت المرتبطة ببعضها البعض. إليك مثالًا عن صيغة مجالات الأسماء في PHP:

المثال 1: صيغة مجالات الأسماء

<?php
namespace my\name;
// راجع صفحة \تعريف مجالات الأسماء
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass;
// راجع صفحة المجال العام
$a = strlen('hi');
// راجع استخدام مجالات الأسماء: اللجوء إلى الدوال والثوابت العامة
$d = namespace\MYCONST;
 // see "namespace operator and __NAMESPACE__
                    	// constant" section
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d);
// راجع فصل "مجالات الأسماء وميزات اللغة الديناميكية"
?>

ملاحظة: أسماء مجالات الأسماء PHP و php والأسماء المركبة منها (مثل PHP\Classes) هي أسماء محجوزة في اللغة ولا يمكن استخدامها في الشيفرة.

تعريف مجالات الأسماء

تعرّف مجالات الأسماء باستخدام الكلمة المفتاحية namespace، ويجب التصريح عن مجال الأسماء في بداية الملف قبل أي شيفرة أخرى، باستثناء الكلمة المفتاحية declare.

تعريف مجالات الأسماء الفرعية

كما هو الحال مع المجلدات والملفات فإنّ بالإمكان تحديد تسلسل هرمي لأسماء مجالات الأسماء؛ لذا يمكن تعريف مجالات أسماء فرعية.

تعريف مجالات أسماء متعددة في نفس الملف

يمكن التصريح عن مجالات أسماء متعددة في الملف نفسه.

استخدام مجالات الأسماء: الأساسيات

من الضروري قبل الخوض في موضوع استخدام مجالات الأسماء أن تستوعب الطريق التي تتبعها PHP في التعرف على العنصر الذي ينتمي إلى مجال أسماء معين والذي تطلبه الشيفرة الخاصة بك.

مجالات الأسماء وخصائص اللغة الديناميكية

تتأثر طريقة استخدام PHP لمجالات الأسماء بطبيعتها الديناميكية كلغة برمجية.

الكلمة المفتاحية namespace و الثابت __NAMESPACE__

تقدّم PHP طريقتين للوصول المجرّد إلى العناصر ضمن مجال الأسماء الحالي، وهما الثابت السحري __NAMESPACE__ والكلمة المفتاحية namespace.

استخدام مجالات الأسماء: التسمية بأسماء بديلة/الاستيراد

من الميزات المهمة في مجالات الأسماء هي القدرة على الإشارة إلى اسم خارجي مؤهّل بالكامل (external fully qualified name) باستخدام اسم بديل (alias)، والقدرة على استيراد مجالات الأسماء. هذه الميزة مشابهة للقدرة على إنشاء روابط رمزية للملفات (symbolic links) أو المجلّدات في الأنظمة المبنية على يونكس (unix-based filesystems).

المجال العام

تضع اللغة جميع الأصناف والدوال في المجال العام في حال عدم تعريف أي مجال أسماء، أي كما كان الحال قبل دعم ميزة مجالات الأسماء في PHP.

استخدام مجالات الأسماء: اللجوء إلى الدوال/الثوابت العامة

عندما تلاقي اللغة اسمًا غير مؤهّل في اسم صنف أو دالة أو ثابت ما، فإنّها تحلل هذه الأسماء بأولويات مختلفة.

قواعد تمييز الأسماء

قواعد تمييز الأسماء في PHP.

الأسئلة المتداولة: أمور يجب عليك معرفتها حول مجالات الأسماء

تقسم هذه الأسئلة المتداولة إلى قسمين: الأسئلة الشائعة، وبعض الاستخدامات التي من المفيد استيعابها بشكل كامل.

مصادر