/
  • Namespaces در پی اچ پی

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی Namespaces در پی اچ پی
    نویسنده پیام
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #1
    Namespaces در پی اچ پی
    لطفا کاربرد این Namespaces چی هست، کجا ها کاربرد داره(در نسحه جدید)
    http://php.net/namespaces
    یک توضیح کامل ممنون
    (آخرین ویرایش در این ارسال: ۱۳۸۸ تير ۱۱ ۰۲:۱۶ صبح، توسط zoghal.)
    ۱۳۸۸ تير ۱۱ ۰۲:۱۶ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : cyletech
    phpveteran آفلاین
    رامين فرماني
    *******

    ارسال‌ها: 266
    تاریخ عضویت: ۱۳۸۸ خرداد ۱۴
    اعتبار: 14
    تشکرها : 11
    ( 514 تشکر در 204 ارسال )
    ارسال: #2
    RE: Namespaces در پی اچ پی
    خوب من سعي مي‌كنم اين رو كمي توضيح بدم اما اين تنها گزينه جديد در php نيست و بهتره تا ورود php نسخه 6 از اون استفاده نكنيم فقط سعي كنيد اين دانش رو كسب كنيد و براي آينده به اون تسلط پيدا كنيد.
    ببينين يكي از مشكلاتي كه با بزگتر شدن پروژه ها باهاشون برخورد مي كرديم اين بود كه برخي از كدها در قالب كلاس/توابع و يا ثابت ها اسامي داشتند كه ما آنها را فراموش مي‌كرديم و در طول پروژه ممكن بود از يك نام دوبار استفاده مي‌شد كه مشكلات زيادي به همراه داشت براي حل اين مشكل نام‌ها به تدريج بزرگ و بزرگتر مي‌شدن بطور مثال ممكن بود نام يك تابع از سي كاراكتر هم بيشتر شود كه اين خوانايي كد رو پائين مي‌آورد در برنامه نويسي شي گرا اين مشكل چيز جديدي نيست و براي حل اون از فضاي نام استفاده مي‌شه در php نسخه 5.3 نيز اين گزينه افزوده شد در واقع در اين نسخه ما با تعريف رابطه‌اي گروهي نام كلاس‌ها/توابع/ثابت‌ها را به يك scope خاص محدود مي‌كنيم.
    براي تعريف فضاي نام بجز در مورد ساختارهاي declare كه اتفاقا يك گزينه جديد در php 5.3 به آن اضافه شده در بقيه موارد حتما بايد در ابتداي كد اين كار صورت گيرد و هيچ كدي اعم از php وغير نبايد پيش از آن وجود داشته باشد
    کد PHP:
    <?php
    namespace MyProject;

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }

    ?>
    در اينجا نام فضاي نام ما فقط MyProject اما فضاي نام‌ها از اسامي سلسله مراتبي نيز پشتيباني مي كنند به اين شكل MyProject\Sub\Level خوب تحت اين شرايط كد بالا به ترتيب ثابتي با نام MyProject\Sub\Level\CONNECT_OK كلاسي با نام MyProject\Sub\Level\Connection و تابعي با نام MyProject\Sub\Level\connect ايجاد مي‌كند.
    خوب حالا اين مسئله نيز مطرح مي‌شود كه آيا مي‌توان چند فضاي نام در يك فايل داشت پاسخ مثبت است كه در مثال‌هاي زير مشاهده مي‌گردد:
    کد PHP:
    <?php
    namespace MyProject;

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }

    namespace 
    AnotherProject;

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }
    ?>
    روش ديگري براي داشتن چند فضاي نام
    کد PHP:
    <?php
    namespace MyProject {

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }
    }

    namespace 
    AnotherProject {

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }
    }
    ?>
    نكته: استفاده از چند فضاي نام در يك فايل به هيچ عنوان پيشنهاد نمي‌شود.
    حال مشكلي كه مطرح مي‌شود استفاده از توابع و كلاس‌هاي پيشين در چنين كدهايي است كه ما به آنها سراسري ها مي گوييم براي دست‌يابي به مواردي اينچنيني فقط روش براكت دار قابل استفاده است.
    کد PHP:
    <?php
    namespace MyProject {

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }
    }

    namespace { 
    // global code
    session_start();
    $a MyProject\connect();
    echo 
    MyProject\Connection::start();
    }
    ?>
    قبلا گفته بودم كه يك استثنا در مورد كدهاي مجاز پيش از فضاي نام وجود دارد و اين هم گزينه جديدي كه به آن در اين نسخه اضافه شده.
    کد PHP:
    <?php
    declare(encoding='UTF-8');
    namespace 
    MyProject {

    const 
    CONNECT_OK 1;
    class 
    Connection /* ... */ }
    function 
    connect() { /* ... */  }
    }

    namespace { 
    // global code
    session_start();
    $a MyProject\connect();
    echo 
    MyProject\Connection::start();
    }
    ?>
    خوب حالا مي‌خواهيم روش استفاده از اين تكنيك را بياموزيم بهترين مثال براي فضاي نام خود سيستم عامل است ما در حالت كلي به سه طريق توسط سيستم عامل به فايل هاي مورد علاقه خود دسترسي پيدا مي‌كنيم.
    1- با ذكر نام فايل file.txt كه اين عمل توسط سيستم عامل بصورت currentdirectory/file.txt برداشت مي‌شود بطور مثال نتيجه نهايي بصورت home/currentdirectory/file.txt خواهد بود
    2-با ذكر زير شاخه و نام مثل subdirectory/file.txt كه نتيجه نهايي بصورت home/currentdirectory/subdirectory/file.txt خواهد بود
    3-باذكر مسير دقيق مثل main/file.txt
    در php درست با همين سه حالت روبرو هستيم
    1-
    کد PHP:
    $a = new foo(); or foo::staticmethod(); 
    اگر فضاي نام جاري currentnamespace باشد بصورت زير تعبير مي‌شود
    کد PHP:
    currentnamespace\foo 
    و اگر كد بصورت سراسري باشد كه طبيعي است از كلاسي با نام foo نمونه سازي خواهد شد
    2-
    کد PHP:
    $a = new subnamespace\foo(); or subnamespace\foo::staticmethod(); 
    كه مانند گذشته اگر فضاي نام جاري currentnamespace باشد بصورت زير تعبير مي‌شود
    کد PHP:
    currentnamespace\subnamespace\foo 
    3-
    کد PHP:
    $a = new \currentnamespace\foo(); or \currentnamespace\foo::staticmethod(); 
    كه فكر نمي كنم ديگر نياز به توضيح داشته باشه
    نكته باقيمانده اين است كه جهت دسترسي به توابع سراسري از داخل يك فضاي نام كافيست به اين شكل عمل كنيم ()strlen\
    ادامه مراحل استفاده و فراگيري را مي توانيد از روي تارنماي php دنبال كنيد
    پ.ن: تمامي توابع و مثال‌ها برگرفته از مستندات php است
    __________________________________________________________________________
    ۱۳۸۸ تير ۱۱ ۱۰:۰۰ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : Alimokhlesi admin hosseintdk775 zoghal molana scooter amir.s Goback shgninc cyletech
    shgninc آفلاین
    سید سجاد شاهچراغیان
    ***

    ارسال‌ها: 1,492
    تاریخ عضویت: ۱۳۸۹ خرداد ۱۹
    اعتبار: 32
    تشکرها : 1402
    ( 665 تشکر در 503 ارسال )
    ارسال: #3
    RE: Namespaces در پی اچ پی
    آقا ممنون و متشکر. واقعا خیلی مفید و جالب بود.
    __________________________________________________________________________
    سالهــــا مـــــى گــــــذرد، حادثه ها مى آید
    انتظـــــار فـــــــرج از نیمـــــه خــــــرداد کشم

    [تصویر:  ShowPicture.aspx?ID=52750d12-5d92-4286-9...height=100]
    ۱۳۹۰ مهر ۶ ۱۰:۱۳ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS