Профессиональное программирование на PHP

Страница 287 из 591


Кэширование повторно используемых данных между запросами 295

VALUES(1 Word1 , :1, :2, now() ) "; $db->prepare($query)->execute($this->word, $data);

}

function retrieve($name) { $db = new DB_Mysql_TestDB;

$query = "SELECT data from ObjectCache where objecttype = 'Word' and keyname

= : 1" ;

$row = $db->prepare($query)->execute($name)->fetch_assoc(); if($row) {

return unserialize($row [data]);

}

else {

return new Text Word($name);

}

} }

I Экранирование данных запроса

I Уровень абстракции баз данных, разработанный в главе 2, содержит функции экранирова-I ния данных. Если в приведенном выше примере уровень абстракции не используется, то к I данным, полученным от serialize (), необходимо применить функцию mysql_real_es-| cape_string().

Чтобы использовать новую кэширующую реализацию Text_Word, необходимо определить, когда будет сохраняться объект. Поскольку целью является экономия затрат на вычисление, можно обновлять ObjectCache в методе numSyllables после выполнения всех вычислений:

function numSyllables() { if($this->_numSyllables) { return $this->_numSyllables;

}

$scratch = $this->mungeWord($this->word); $fragments = preg_split (11 / [^aeiouy] +/" , $scratch) ; if(!$fragments[0]) {

array_shift($fragments);

}

if (!$fragments[count($fragments) -1]) { array_pop($fragments);

}

$this->_numSyllables += $this->countSpecialSyllables($scratch) ; if (count($fragments)) {

$this->_numSyllables += count($fragments);

}

else {

$this-> numSyllables = 1;

}

// сохранить данный объект до того, как возвращать его

$this->store();

return $this->_numSyllables;

}




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006