الكلمة المفتاحية use
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 11 من 91.
إن كتابة مسار مساحة الاسم (namespace) بالكامل في كل مرة تستخدم فيها فئة (class) قد يصبح أمراً مملاً. تتيح لك الكلمة المفتاحية use استيراد فئة في أعلى ملفك، بحيث يمكنك الإشارة إليها باسمها القصير.
بدلاً من كتابة \Blog\User بشكل متكرر، يمكنك استيراده مرة واحدة:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
عندما تحتاج إلى فئات (classes) من مساحات أسماء (namespaces) مختلفة بنفس الاسم، يمكنك إنشاء اسم مستعار (alias) باستخدام الكلمة المفتاحية as:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
المخرجات:
Alice
alice@example.com
يمكنك أيضاً استيراد فئات متعددة من نفس مساحة الاسم (namespace) باستخدام عمليات الاستيراد المجمعة:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
نقطة رئيسية: يجب أن يظهر بيان use بعد تصريح namespace (إن وجد) وقبل أي كود آخر. فهو يجعل الكود الخاص بك أكثر نظافة وأسهل في القراءة من خلال التخلص من مسارات مساحة الأسماء المتكررة.
التحدي
سهللنقم بتنظيم تطبيق مراسلة باستخدام الكلمة المفتاحية use لاستيراد الفئات بشكل نظيف وتجنب كتابة مسارات مساحات الأسماء الكاملة في كل مكان.
ستقوم بإنشاء ثلاثة ملفات تعمل معاً:
Messaging/Email.php— قم بتعريف فئةEmailفي مساحة الأسماءMessaging. يجب أن تحتوي على خاصيةpublic $address، ومنشئ (constructor) يقبل العنوان ويقوم بتعيينه، وتابعsend()يعيد"Sending email to [address]".Messaging/SMS.php— قم بتعريف فئةSMSفي مساحة الأسماءMessaging. يجب أن تحتوي على خاصيةpublic $phone، ومنشئ (constructor) يقبل رقم الهاتف ويقوم بتعيينه، وتابعsend()يعيد"Sending SMS to [phone]".main.php— قم بتضمين كلا ملفي الفئات، ثم استخدم الكلمة المفتاحيةuseلاستيراد كلتا الفئتين. أنشئ كائنEmailبالعنوان"alice@example.com"وكائنSMSبالهاتف"555-1234". اطبع نتيجة استدعاءsend()لكل كائن (كل منهما في سطر منفصل).
في main.php، بدلاً من كتابة new \Messaging\Email(...)، ستقوم باستيراد الفئات في الأعلى باستخدام عبارات use بحيث يمكنك ببساطة كتابة new Email(...) و new SMS(...).
ورقة مرجعية
الكلمة المفتاحية use تستورد فئة (class) في الجزء العلوي من ملفك، مما يسمح لك بالإشارة إليها باسمها المختصر بدلاً من مسار مساحة الاسم (namespace) الكامل:
<?php
use Blog\User;
$user = new User("Alice");
عندما تشترك فئات من مساحات أسماء مختلفة في نفس الاسم، قم بإنشاء اسم مستعار (alias) باستخدام الكلمة المفتاحية as:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
استورد فئات متعددة من نفس مساحة الاسم باستخدام عمليات الاستيراد المجمعة:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
يجب أن يظهر بيان use بعد إعلان namespace (إن وجد) وقبل أي كود آخر.
جرّب بنفسك
<?php
// تضمين ملفات الفئات
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: استخدم الكلمة المفتاحية 'use' لاستيراد كلتا الفئتين من مساحة الاسم Messaging
// هذا يسمح لك بكتابة 'new Email(...)' بدلاً من 'new \Messaging\Email(...)'
// TODO: قم بإنشاء كائن Email بالعنوان "alice@example.com"
// TODO: قم بإنشاء كائن SMS بالرقم "555-1234"
// TODO: اطبع نتيجة استدعاء ()send على كل كائن (كل واحدة في سطر منفصل)
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsالكلمة المفتاحية $thisالـ Methodsالـ Propertiesالمنشئ (__construct)الهادم (__destruct)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةالكلمة المفتاحية parent::إعادة تعريف الدوال (Method Overriding)الكلمة المفتاحية finalالأصناف المجردة (Abstract Classes)مراجعة - هيكلية الموظفين7التغليف (Encapsulation)
العام، المحمي، الخاص (Public, Protected, Private)نظرة متعمقة على معدلات الوصولدوال Getters و Settersإخفاء المعلوماتميزة Constructor Promotion (8.0)مراجعة - نظام سجلات الطلاب10مفاهيم البرمجة كائنية التوجه المتقدمة
التركيب مقابل الوراثةحقن التبعيةالأصناف المجهولةالتعدادات (PHP 8.1)الألياف (PHP 8.1)تعمق في استنساخ الكائناتالمولدات والمكررات13أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المستودع2مساحات الأسماء والتحميل التلقائي
مقدمة إلى مساحات الأسماءالكلمة المفتاحية useمعيار التحميل التلقائي PSR-4أداة التحميل التلقائي Composerملخص - مشروع منظم5الواجهات والعقود
مقدمة إلى الواجهاتتنفيذ الواجهاتتنفيذ واجهات متعددةالواجهة مقابل الـ Abstract Classالـ Type Hinting مع الواجهاتملخص - حاسبة الأشكال8الميثودات السحرية (Magic Methods)
مقدمة في الميثودات السحرية__toString و __debugInfo__get, __set, __isset, __unset__call و __callStatic__clone واستنساخ الكائنات__serialize و __unserializeمراجعة - Custom Collection3خصائص الكلاس
خصائص الـ Instance مقابل الخصائص الساكنة (Static)الثوابت في الكلاساتالدوال والخصائص الساكنة (Static)الخصائص الخاصة (Private) والمحمية (Protected)خصائص للقراءة فقط (Readonly) في PHP 8.1مراجعة - مدير الحساب البنكي6تعدد الأشكال (Polymorphism)
مراجعة إعادة تعريف الدوال (Method Overriding)تعدد الأشكال عبر الـ Interfacesتلميح النوع (Type Hinting) وأنواع الاتحاد (Union Types)الربط الاستاتيكي المتأخر (Late Static Binding)ملخص - معالج الدفع (Payment Processor)