Anında PHP kodu ayrıştırmak ve bir geçici var depolamak

4 Cevap php

Ben sadece desteklenecek birkaç küçük operasyon gerekir çünkü benim kendi templatesystem oluşturma. Bunlardan biri benim şablonda bir veritabanından oluşturulan dinamik verilerle widget yükleniyor.

PHP kodu ayrıştırmak için bir yolu var mı, sonucu görüntülemek ancak bir değişkende saklamak ve daha sonra başka bir yere o değişkenin oluşturulan kaynağını kullanmak değil mi?

Şu anda benim sitede ilk şey gibi bozdu alır bir echo komutunu ve içerik görüntüler kullanmak her ob_get_contents() kullanıyorum ama var. Bu benim nasılsa civarı çalışmak istiyorum bir davranıştır.

Bu mümkün mü? Ya da ben ob_get_contents tamamen kötüye am?

4 Cevap

Onların yanıtları için herkes teşekkürler. Ama benim kodda bir aptal 'hata' bulundu. Benim TemplateParser ben $ i kullanarak, onlar üzerinden bir şablon ve döngüde bölgeleri sayıyorum. Sonra bir widget ben de bir veri kümesi (navigasyon yapısı) yineleme aracılığıyla vardı ve yine $ i kullanılmıştır. Bu benim sorunu yaratıyor. Ben sadece benim sorunu çözmek için $ adlandırmak zorunda kaldı.

Eğer sayfanın başında bir ob_start() yaptığınızdan emin olun.

Başka bir yolu da php gibi, bu baskı daha sonra yürütme ve olduğu gibi bir değişkene html eklemek olacaktır:

$array = array('asd', 'dsa');
$html = '<div id="array">';
foreach ($array as $item) {
    $html .= '<div class="item">'.$item.'</div>';
}
$html .= '</div>';

ve daha sonra

echo $html;

İstediğiniz nerede olmak.

Yapmak istediğim tek şey bir RAII stil paketinde sarma obstArt () ve obgetcontents () 'dir. Bu istisnalar sırasında yuvalama ve uygun kullanım sağlar. __ Uygulamak toString () ve güzel bir arayüze sahip. Böyle bir şey görünüyor kullanma:


<?php
function someFunction()
{
    $buffer = new BufferOutput;
    echo 'something';

    $output = (string)$buffer;
    unset($buffer); // for illustration. automatically calls ob_end_clean()

    return $output;
}

echo someFunction();
?>

Eğer bu şekilde yaptığınızda, size başlangıç ​​denilen & olmadığı endişesi önleyebilirsiniz düzgün bitirmek. Eğer tampon çıktı depolamak için gidiyoruz eğer, size obendclean () çağrısı önce hemen onu kapmak gerekir.