السلام عليكم،
طحت بالغلط على صفحة تناقش الفرق بين 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.
قمت بإنشاء ملفين:
- echo.php
- 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 تقبل مدخل واحد فقط
بالشكل التالي
كود 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
هذا و الله أعلم
رائد