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

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


176 Глава 6 Блочное тестирование

}

$suite = new PHPUnit_Framework_TestSuite(1Text_WordTestCase');

PHPUnit_TextUI_TestRunner::run($suite);

?>

Естественно, тест потерпит неудачу, поскольку класс Word даже не существует. Однако он скоро появится. Интерфейс, используемый для класса Word, представляется очевидным. Если он окажется недостаточным для подсчета слогов, его можно расширить.

Следующий этап — реализация класса Word, который пройдет данный тест. <?РНР

class Text_Word { public $word;

public function _construct($name) {

$this->word = $name,}

protected function mungeWord($scratch) { // нижний регистр для простоты $scratch = strtolower($scratch); return $scratch;

}

protected function numSyllables() {

$scratch = mungeWord ($this->word) ,•

// Разделить слово no гласным, a e i о u,.

//ив данном случае всегда у

$fragments = preg_split("/[*aeiouy]+/", $scratch);

// Очистить оба конца массива, если они имеют пустые элементы

if(!$fragments[0]) {

array shift($fragments);

}

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

}

return count($fragments);

}

}

?>

Данный набор правил не пропускает слово late. В словах английского языка, заканчивающихся одной буквой е, е редко считается отдельным слогом (в противоположность, например, у или ie). Это можно исправить, удаляя завершающую е, если она существует. Ниже приведен соответствующий код.

function mungeWord($scratch) {

$scratch = strtolower($scratch);

$scratch = preg_replace("/e$/", "", $scratch);

return $scratch;

}

Теперь тест не проходит слово the, в котором не останется слогов после удаления завершающей е. Данную проблему можно решить, если тест всегда будет возвращать хотя бы один слог; см. код ниже.

function numSyllables() {

$scratch = mungeWord($this->word);




  Hostland.Ru

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