البته من خودم تا بحال به اين موضوع فکر نکرده بودم چون هميشه کدهاي HTML رو از کدهاي PHP جدا نگه داشتم و در نهايت با يک echo اطلاعات مورد نياز رو بر روي صفحه چاپ کردم و چيزي که در اکثر برنامه هاي مطرح که با PHP نوشته شده مشاهده ميشه همين هست.
اما با در نظر گرفتن اينکه <?php ... ?> يک نماد آغازگر براي انجام عمليات پردازش سرور به شمار ميره اصولا باز و بسته شدن اون به دفعات براي سرور خوش آيند به نظر نميرسه، چرا که با هر بار رسيدن به اين نماد يک مرحله به مرحله تشخيص اضافه ميشه (البته اون قدر نيست که واقعا بشه گفت مشکل ايجاد ميکنه).
موضوع ديگه اي که ميشه به اون پرداخت اين هست که نه ميشه روش اول رو رد کرد و نه روش دوم، هر کدوم براي موقعيت خاص مي تونند بهتر واقع بشن، فرض کنيد شما صفحه اي داريد که 90 درصد اون رو کدهاي HTML ساده (فاقد متغيرهايي که نتيجه آنها حاصل پردازشگر PHP هستند) تشکيل ميدهند و تنها 10 درصد اطلاعات پردازشي هستند، به طبع روش دوم بهتر هست نه به اين معني که روش اول فاجعه به بار مياره! گاهي اوقات اين قضيه برعکس هست و خب در اين حالت باز روش اول مي تونه بهتر باشه و باز هم نه به اين معنا که روش دوم فاجعه به بار مياره، چه بسا در Smarty اگه فايل هاي حاصل از کامپايل توسط اين کلاس رو در فايل هاي cache شده ملاحظه نموده باشيد <?php ... ?> بسيار به چشم مي خورند و خب با توجه به اينکه Smarty يکي از پکيج هاي معتبري هست که براي PHP ارائه شده بنابراين ميشه نتيجه گرفت که اين روش هم مناسب هست.
شايد مزيتي که روش اول نسبت به روش دوم مي تونه داشته باشه کاهش حجم فايل هست. وجود يک <?php ... ?> بهتر از اينه که چندين <?php ... ?> وجود داشته باشه.
خودتون تصميم بگيريد، کدوم زيباتر هست و به فهم و خوانايي کمک بيشتري مي کنه؟
اين قطعه برنامه:
PHP:
<?php
$start = explode(' ', microtime());
$a = 'Text 1';
$b = 'Text 2';
$c = 'Text 3';
$d = 'Text 4';
$e = 'Text 5';
?>
<div><?php echo $a; ?></div>
<div><?php echo $b; ?></div>
<div><?php echo $c; ?></div>
<div><?php echo $d; ?></div>
<div><?php echo $e; ?></div>
<hr size="1" />
<?php
echo "Finish.";
$end = explode(' ', microtime());
$response = $end[0] - $start[0] + $end[1] - $start[1];
?>
<br />
Taken Time: <?php echo number_format($response, 6); ?>
يا اين:
PHP:
<?php
$start = explode(' ', microtime());
$a = 'Text 1';
$b = 'Text 2';
$c = 'Text 3';
$d = 'Text 4';
$e = 'Text 5';
$html = '<div>$a</div>
<div>$b</div>
<div>$c</div>
<div>$d</div>
<div>$e</div>
<hr size="1" />
Finish.
<br />
Taken Time: $response';
$end = explode(' ', microtime());
$response = number_format(($end[0] - $start[0] + $end[1] - $start[1]), 6);
eval('echo "' . addslashes($html) . '";');
?>
قطعه برنامه دوم 40% بطور ميانگين سرعت بالاتري داره، اما ممکنه گاهي اين تناسب برعکس باشه.