ميزة جديدة مهمة في PHP 5.3 هي مساحات الأسماء.
تم اقتراح هذه الميزة في PHP5.0x، ولكن تم إلغاؤها لاحقًا ومن المقرر تنفيذها في PHP6. وهذه المرة، تم إصدار PHP5.3 "قبل الموعد المحدد" مرة أخرى، مما يدل على أن المطورين يولون أهمية كبيرة له ويتوخون الحذر.
عندما يتم إصداره رسميًا، قد يكون محتوى المستند قديمًا (قد تكون الوثائق قديمة)، لذا إليك شرح موجز لاستخدام مساحة الاسم: أولاً، أعلن عن مساحة اسم وأضف مساحة اسم الكلمة الرئيسية الجديدة، والتي يجب أن تكون في بداية ملف الفئة
<?phpnamespace Project::Module;class User {const STATUS_OK = true;function Register($data) {...}...} ثم في وحدة التحكم (ربما ملفات أخرى) يمكنك الاتصال بـ
$ user = new like this Project::Module::User();$user->register($register_info); هو في الواقع نفس الشيء المعتاد، لكن يمكننا ربط فئتين مستقلتين. على سبيل المثال،
Project::Module::User;Project::Module::Blog; هذا يجعل من السهل وصف وفهم العلاقة بين المتغيرات والفئات من اللغة نفسها، وبالتالي تجنب طريقة التسمية الطويلة "التقليدية" لـ Project_Module_Blog .
قد يكون من الصعب شرح فوائد استخدام مساحات الأسماء، وقد يفسر الاستخدام المضاف حديثًا والكلمات الرئيسية المشكلة بشكل أفضل. يمكن أن تشير عبارات الاستخدام وas إلى "أسماء مستعارة" لمساحة الاسم وتعلن عنها. على سبيل المثال، يمكن كتابة التعليمات البرمجية لإنشاء مثيل للفئة في وحدة التحكم أعلاه على النحو التالي:
استخدم Project::Module;$user = newModule
::User();$user->register($register_info);
::Module:: المستخدم كـ ModuleUser;$user = new ModuleUser;$user->register($register_info); يمكن أيضًا الوصول إلى الثوابت الموجودة في الفصل من خلال مساحة الاسم. على سبيل المثال، يمكن الوصول إلى STATUS_OK في الفئة أعلاه من خلال مساحة الاسم
المشروع::الوحدة النمطية::المستخدم: :STATUS_OK الوصول. علاوة على ذلك، يمكنك أيضًا استخدام الأسماء المستعارة لتبسيط مثل هذه "الأسماء المتغيرة" الطويلة،
استخدم Project::Module::User::STATUS_OK كـ STATUS_OK;echo STATUS_OK; بالمناسبة، مفهوم "مساحة الاسم العامة". يشير ما يسمى بـ "المساحة الفائقة" إلى المتغيرات والفئات والوظائف التي لا تحتوي على مساحة اسم محددة. على سبيل المثال
، يمكن تنفيذ دالة مثل function foo() {...} باستخدام foo() أو ::foo();.
وأخيرًا، استخدم وظيفة التحميل التلقائي لتحميل الفصل في مساحة الاسم المحددة. الوظيفة البسيطة هي كما يلي
function __autoload( $classname ) {$classname = strtolower( $classname );$classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );require_once( dirname( __FILE__ ) . '/' . $ classname .'.class.php' );} بهذه الطريقة، على سبيل المثال،
يمكن أن يؤدي استدعاء __autoload('Project::Module::User'); إلى تحميل ملف Project_Module_User.class.php تلقائيًا (على الرغم من أن هذا يبدو غير مريح).