verjetno bi se dalo kaj sčarati v tem stilu, vendar toplo odsvetujem, ker je eval nevaren in počasen in koda v stringu je izven dosega parserja (IDE ne razume in napake se odkrijejo šele pri evalu). Ta pristop po moje ni v redu.
Poleg tega imaš še varnostno luknjo. Kaj če ti kdo poda parameter id=); zlobna_koda(? :)
Keširaj ali posamezne končne HTML kose, ali pa objekte/arraye in uporabi wrapper za cache:
class NewsCategoryCacher {
function get($id) {
if (news $id is in cache)
return from cache
else
$nc = new NewsCategory($id);
write to cache
}
function getMostViewedByCategory($category) {
if (most viewed $category->id is in cache)
return from cache
else
$most_viewed = $category->getMostViewed();
write to cache and return
}
}
in potem uporabljaš:
$category = NewsCategoryCacher::get(234);
$most_viewed = NewsCategoryCacher::getMostViewed($category);
To je osnovna ideja, da se jo precej raztegniti.
BTW, če te zanima framework za večplastno keširanje v PHPju, si oglej LayerCache. Omogoča zelo elegantno večplastno keširanje z zelo malo kode. Na enem projektu recimo uporabljam 3-plastno: izvor je mysql tabela, cachi pa so memcache, apc in še lokalen PHP array.