PHP - nesneleri birleştirilmesi ve dize döküm - kötü bir fikir?

4 Cevap php

Bu bağlamda kullanılan nesnelerini bitiştirmek için kötü bir uygulama mı:

$this->template->head .= new View('custom_javascript')

Bu i, normalde belirli sayfaları için ekstra css / js şeyler eklemek yoludur. Benim temel html şablon benim ana Website_controller ayarlanmış bir $ kafa değişkeni olan bir MVC yapısını kullanabilirsiniz. Ben sadece bit ve sayfa / kontrolör ihtiyacı hangisi css / js şeyler parçalar eklemek anlamına gelir gibi ben bir süre bu yaklaşım kullandık. Ama "Object ID # 24" de yukarıdaki kod sonuçları, toString () sonucu bence denir değil PHP 5.1.6 bir sorun rastlamak sahip, ben sadece PHP 5.1 çalışmak için bu düzeltmek olup olmadığını yeniden düşünülmesini am 0,6 ya da ben genel olarak bu yaklaşımı yeniden düşünmek gerekir eğer.

Herhangi bir işaretçiler takdir!

4 Cevap

Her zaman () fonksiyonu (veya ne olursa olsun onu aramak istiyorum) render şablona dize olarak geçen, bir fabrika nesnesi olarak Görünümünü kullanabilirsiniz, böylece orada var kod gibi bir şey olmazdı;

$this->template->head .= View::factory('custom_javascript')->render()

Bu şablona iletilen önce anı işlenir.

Kohana 3, örneğin izleme / şablonları ile çalışmak için bu desen kullanır, bu konuda daha fazla okuyabilirsiniz at unofficial wiki

Sadece dizeleri birleştirmek - böylece (bu sadece bir hata atmak ve ölmek değil varsayarak) bu kod bir dizeye ekleme önce nesne seri olacaktır. not bir fonksiyon - Eğer HTML oluşturmak için bir toString () yöntemi var olsa da, bu 'yeni' yapı ile çalışmak için gitmiyor.

Muhtemelen bir noktada nesneden bazı html kodu oluşturmak istiyorum. Bu durumda böyle bir şey olmalı:

$obj=new View('custom_javascript')
$this->template->head . $obj->generateHtml();

Sadece bazı html biçimlendirme bir dize sarmak için yepyeni bir nesnesi oluştururken çok savurgan olmasına rağmen - ki ... - Ben bu iş için yöntemler bir dizi ile gitmek istiyorum

$this->template->head->addJs('custom_javascript');
$this->template->head->addCSS('make_it_look_funky');
...

Benim için yanlış bir yaklaşım gibi görünüyor. Bu dizeleri birleştirerek (kodunuz tarafından bakılırsa) denetleyicisi yere şablonları oluşturmak için kötü bir fikir. Daha iyi, doğrudan böyle teamplate tüm gerekli blokları eklemek:

controller:

// setup template variable
$this->template->var_script = 'custom_javascript';
$this->template->render();

template:

<html>
<head>
<title><?= $title ?></title>
<?= Html::script($var_script) ?>

Onlar PHP 5.2.0 den başlayan dizeleri olarak alıştığınız zaman bir sihirli __ toString () yöntemi ile nesneleri sadece dizeleri otomatik olarak dönüştürülür. Eğer 5.1.6 kullanmak çünkü bu durumda, elinizde bir dize olarak nesne artığını gerekir, böylece olacaktır:

$this->template->head .= (string) new View('custom_javascript');