2011-11-26 15 views
12

Neden bir Heredoc içinde {number_format($row['my_number'])} gibi bir şey yapamıyorum merak ediyorum. Aşağıda $myNumber gibi bir değişken tanımlamak zorunda kalmadan bu etrafında herhangi bir yolu var mı?Bir Heredoc içinde bir dizi değeri biçimlendirme

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc numaralı telefonu aradık ama hiçbir şey bulamadık.

Sen {$ değişken ifadeleri kullanarak bir heredoc dizesinde fonksiyonlarını yürütebilirsiniz

foreach ($dbh -> query($sql) as $row): 
    $myNumber = number_format($row['my_number']); 

    $table .= <<<EOT 
      <tr> 
      <td>{$row['my_number']}</td> // WORKS 
      <td>$myNumber</td> // WORKS 
      <td>{number_format($row['my_number'])}</td> // DOES NOT WORK! 
      </tr> 
EOT; 
endforeach; 
+0

hiç kendiniz denediniz mi? – KingCrunch

+2

Evet. Kendim denedim. – ksindi

+3

@KingCrunch açıkça evet, OP denedim. Yukarıdaki kod örneğine bakın. –

cevap

25

KOD. Bununla birlikte önceden fonksiyon adı için bir değişken tanımlamak gerekir:

$number_format = "number_format"; 

$table .= <<<EOT 
     <tr> 
     <td>{$row['my_number']}</td> // WORKS 
     <td>$myNumber</td> // WORKS 
     <td>{$number_format($row['my_number'])}</td> // DOES NOT WORK! 
     </tr> 

Yani yenilgi bu tür kısa ve özlü oluşu ait heredoc amaç.


okunabilirliği için, bu amaçla $expr = "htmlentities"; gibi bir boşluk/jenerik işlev adı tanımlamak için daha yararlı olabilir. Sonra hemen her karmaşık ifade ve yorumlu metin veya doublequotes tüm küresel işlevlerini kullanabilir:

" <td> {$expr(number_format($num + 7) . ':')} </td> " 

Ve {$expr( böyle bir yapı rastlar herkese sadece daha belirgin olduğunu düşünüyorum. (Aksi takdirde bu sadece garip bir çözümdür.)

+2

+1 Bunu hiç görmedim. Çok temiz. –