النتائج 1 إلى 6 من 6

الموضوع: [تحليل ع السريع] الفرق بين echo و print

  1. #1
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    172

    [تحليل ع السريع] الفرق بين echo و print



    السلام عليكم،

    طحت بالغلط على صفحة تناقش الفرق بين echo و print ... فطلعت بفائدة صغيرة و قلت اكتبها هنا
    لأنه المواضيع اللي تناقش نفس اللي بناقشه قديمة
    * عام 2003: http://www.swalif.net/softs/swalif54/softs41907/
    * عام 2001: http://www.swalif.net/softs/swalif54/softs16513/

    ----------------------
    عشان تنسخوا التجارب و تسووها، تحتاجوا الحزم هذه (كل الشغل تحت على لينكس)
    * php
    * php-devel
    * apache

    و برضه الإضافة هذه:
    * Vulcan Logic Dumper
    ----------------------
    بس عشان لو فيه مبتدئين:
    echo و print يستخدموا لطباعة "مخرجات" في شاشة المستخدم.

    نبدأ بـ الفرق بين echo و print

    السرعة
    أسهل اختبارات السرعة إنك تقيس الوقت اللي تاخذه إما echo أو print عشان تطبع مخرجاتك. و تقريبا أسهل طريقة لقياس الوقت هي باستخدام دالة microtime. نقدر نقيس الوقت قبل و بعد استخدامهم، لكن قياس السرعة في طباعة مخرج واحد غير منطقي و لا يمثل شيئا.
    قام Jason Kaczmarsky بتأكيد نتائج ما هو مُثبت في الانترنت باستخدام
    كود PHP:
    $StartTime=microtime(1);
    echo 
    '<div style="display:none">';
    for(
    $i=0;$i<100000;$i++)
        echo 
    "Hello world!<br />";
    echo 
    "</div>Echo: ".round(microtime(1)-$StartTime,5);

    $StartTime=microtime(1);
    echo 
    '<div style="display:none">';
    for(
    $i=0;$i<100000;$i++)
        print 
    "Hello world!<br />";
    echo 
    "</div><br />Print: ".round(microtime(1)-$StartTime,5); 
    القسم الأول يختبر سرعة echo في كتابة Hello world! مئة ألف مرة.
    و القسم الثاني يختبر سرعة print لنفس الشئ.

    قم بنسخ الكود و اختبره، echo أسرع
    النتيجة: echo أسرع
    التحليل:
    يمكن يخطر في بالك "ليش أسرع؟"، السبب يتوضح عند استخدام إضافة Vulcan Logic Dumper.
    قمت بإنشاء ملفين:
    1. echo.php
    2. print.php

    محتواهم كالتالي:

    كود:
    [root@mngmnt1 html]# cat echo.php
    <?
    echo "swalifsoft";
    ?>
    [root@mngmnt1 html]# cat print.php
    <?
    print("swalifsoft");
    ?>
    و قمت باستخدام VLD لمعرفة الأوامر و الهيكلة المتبعة لطباعة الكلمات (طبعا الطريقة ملطوشة من موقع و ما قدرت ألاقيه :P).

    كود:
    [root@mngmnt1 html]# php -dvld.active=1 echo.php
    line     # *  op                           fetch          ext  return  operands
    ---------------------------------------------------------------------------------
       2     0  >   ECHO                                                     'swalifsoft'
       4     1    > RETURN                                                   1
             2*   > ZEND_HANDLE_EXCEPTION
    المخرجات اللي مالها داعي شلتها. اللي باين إنه تمت الطباعة باستخدام echo و بس. لكن إذا اتبعنا نفس الطريقة لـ print


    كود:
    line     # *  op                           fetch          ext  return  operands
    ---------------------------------------------------------------------------------
       2     0  >   PRINT                                            ~0      'swalifsoft'
             1      FREE                                                     ~0
       4     2    > RETURN                                                   1
             3*   > ZEND_HANDLE_EXCEPTION
    فيه سطر زايد، اللي هوه FREE. و هذه يتم فيها ارجاع قيمة اللي تعادل "1" في حال نجاح طباعة المخرج. و من هنا سبب بطء print مقارنة بـ echo

    عدد المدخلات:
    echo : تقبل بعدد غير منتهي (أو مقبول) من المدخلات. و هذا مكتوب في نفس شرح echo في دليل php
    echo — Output one or more strings
    و يتم إرسال المدخلات باستخدام الفاصلة
    كود PHP:
    echo "swalif","soft"
    (إذا سألت لماذا الفاصلة و ليس النقطة، أقولك استنى )

    أما الـ print تقبل مدخل واحد فقط
    print — Output a string
    بالشكل التالي
    كود PHP:
    print("swalifsoft"); 
    النتيجة:
    إذا أردت طباعة متغيرات كثيرة، استخدم echo.

    طيب، يمكن تسأل: ليه الـ php فيها print؟ ايش هدفها في الحياة؟
    باختصار، print قادرة على شئ echo ما تقدر عليه.
    و هنا نجي للنقطة الثالثة:

    قدرة استخدامها كدالة:
    print تقدر تستخدمها كدالة بس echo لا.
    و ليه تستخدم أمر للطباعة كدالة؟ عدة أسباب:
    * يمكن تبغى تعرف إذا عندك القدرة على طباعة مخرجات لشاشة المستخدم أو لأ
    * أو استخدامها في مثل هذه الحالات:
    كود PHP:
    ($some_var) ? print 'true' : print 'false'
    إذا استبدلت print بـ echo، لن تعمل
    النتيجة:
    استخدم print لأنك تقدر تستعمها كدالة.

    باختصار:
    استخدم echo دائما إلا في حالة أردت استخدام ما ذكر في "قدرة استخدامها كدالة"

    --------------
    للزيادة:
    طيب إذا بتستخدم echo، و سألت السؤال اللي فوق (ليه فاصلة بدلا من النقطة)، بتستفيد من هذه النقطة.

    خلينا نقارن بين
    كود PHP:
    echo "swalif"."soft"
    و
    كود PHP:
    echo "swalif","soft"
    الأولى تستخدم مبدأ الـ concatenating أو الـ "تسلسل". باختصار تقوم بدمج كل شئ لمتغير واحد مؤقت يحفظ في الذاكرة ثم طباعة هذا المتغير. في المثال أعلاه، echo تقوم بطباعة swalifsoft في مرة واحدة فقط.

    الثانية، تقوم بطباعة كل كلمة لحالها. و في المثال أعلاه، تقوم echo بطباعة swalifsoft على دفعتين. أول مرة تقوم بطباعة swalif ثم تقوم بطباعة soft.

    طيب أيهم اسرع؟
    الثانية تعتمد على عدة كتابات echo، و بالتالي تعتمد على سرعة الـ echo.
    المشكلة أن عملية echo سريعة (أسرع من print) لكن بشكل عام بطيئة إذا قمت باستخدام مدخلات كثيرة.
    الطريقة الأولى تدمج كل المصفوفات و تقوم بطباعة واحدة. و الدمج يعتمد على سرعة السيرفر و عادة السيرفر سريع. كما تعتمد أيضا على ذاكرة السيرفر لحفظ المصفوفة المؤقتة. و دمج المصفوفات لمصفوفة واحدة لا يؤثر "جذريا" و بشكل كبير على الذاكرة أو يستحوذ على جزء كبير.

    عادة الفرق بين الطريقتين أجزاء أجزاء من الثانية.
    و كمية الذاكرة المستهلكة من قبل السيرفر لإنشاء المصفوفة المؤقتة في الطريقة الأولى ليست كبيرة (تحتاج لعدد كبير جدا من الاتصالات لتعدي حاجز الـ 1 ميجا من الذاكرة)

    فـ باختصار،

    إذا مواردك (الذاكرة) قليلة جدا و لديك الكثير من المصفوفات لطباعتها و لا تهتم بفرق السرعة، استخدم الفاصلة.

    إذا مواردك ليست لها أي أهمية، استخدم النقطة لأنها أسرع بقليييييل :P

    هذا و الله أعلم
    رائد





    التعديل الأخير تم بواسطة Cenrak ; 24-12-2011 الساعة 12:18 AM
    __________________
    "اقْــرَأ "
    اللهم ارزقنا حسن الختام


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Jul 2008
    المشاركات
    427


    بصراحة إستفدت الكثير
    كنت أعلم بعض المعلومات ولكن لديك التأكيد والحسابات






  3. #3
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    تعجبني المواضيع التي فيها مثل هذه المجهودات في التحليل. نريد المزيد من هذه النوعية من المواضيع

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  4. #4
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    48


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





    __________________
    مدونة الرحال

  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    779


    شكرا لك اخي العزيز على هذا المجهود
    الان وضح الفرق بين الدالتين





    __________________
    أهلا و سهلا بكم في :-
    موقع دار الأوائل
    تفضل معنا خدمات الاستضافة
    موقع العبقري لخدمات الاستضافة



  6. تحليل ممتاز

    لكن فيه نقطة بخصوص:

    * أو استخدامها في مثل هذه الحالات:
    كود PHP:
    ($some_var) ? print 'true' : print 'false'
    إذا استبدلت print بـ echo، لن تعمل
    ممكن تكون بالايكو بالشكل:

    كود PHP:
    echo ($boolean) ?  'true' :  'false'






    __________________
    * راسلني





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض