سوالف اندرويد




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو نشيط
#1  
[تحليل ع السريع] الفرق بين 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 في 23-12-2011 الساعة 09:18 PM.
Cenrak is offline   قديم 23-12-2011, 06:03 PM
الرد مع إقتباس
عضو نشيط جدا
#2  

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






مستر سمعة is offline   قديم 23-12-2011, 10:21 PM
الرد مع إقتباس
مشرف قسم PHP
#3  

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

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






__________________
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 29-12-2011, 01:59 PM
الرد مع إقتباس
عضو نشيط
#4  

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






__________________
مدونة الرحال
BROKEN-CROSS is offline   قديم 06-01-2012, 01:09 AM
الرد مع إقتباس
عضو سوبر نشيط
#5  

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






__________________
أهلا و سهلا بكم في :-
موقع دار الأوائل
تفضل معنا خدمات الاستضافة
موقع العبقري لخدمات الاستضافة
عبقري العرب is offline   قديم 06-01-2012, 09:04 AM
الرد مع إقتباس
عضو
#6  

تحليل ممتاز

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

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

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






__________________
* راسلني
عبدالرحمن العنكبوتي is offline   قديم 07-01-2012, 11:52 PM
الرد مع إقتباس
الرد على الموضوع



أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
سؤال بخصوص echo Abo-Ahmed PHP 2 28-09-2009 06:27 PM
مشكلة تواجهني بـ echo Gmc.9 PHP 6 15-03-2007 06:25 PM
ممكن طريقة استعمال echo&print مع دالة wihle ؟ morocco PHP 7 16-12-2006 08:55 PM
ماالفرق بين echo و print ؟ أبو الوليد الويب والويب 2.0 والـ Semantic Web 1 10-02-2003 05:37 PM
ما الفرق بين Print و Echo في لغة PHP ? محبوب ياسين الويب والويب 2.0 والـ Semantic Web 5 13-07-2001 05:55 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 10:23 PM.