Исходный код
$this->oPostTest->recipients = trim($this->oPostTest->recipients);
$this->oPostTest->recipients = trim($this->oPostTest->recipients, ';');
$this->oPostTest->recipients = str_replace(' ', ';', $this->oPostTest->recipients);
$this->oPostTest->recipients = str_replace(';;', ';', $this->oPostTest->recipients);Что не так в исходном коде
Первая проблема в исходном коде: обработка списка получателей привязана к конкретному полю $this->oPostTest->recipients. Решение: обработка списка получателей должна быть оформлена в виде обработки абстрактной строки, без привязки к месту хранения этого списка, то есть к полю $this->oPostTest->recipients.
Вторая: исходный код погружается напозволительно глубоко в детали устройства объекта $this->oPostTest, с которым в данный момент работает. Решение: вызов обработчика списка получателей нужно поручить тому объекту, который этот список хранит, то есть $this->oPostTest. Пока не очень ясно, в какой момент должна происходить обработка: при записи нового значения в поле recipients, или же в момент использования.
К слову, и весь остальной алгоритм, касающийся формирования письма, должен быть перенесён в соответствующий класс.
Пример рефакторинга исходного кода
class Post {
    private $recipients = '';
    public function __construct($recipents) {
        $this->recipients = Post::normalizeRecipients($recipients);
    }
    static protected function normalizeRecipients($recipients) {
        $recipients = trim($recipients);
        $recipients = trim($recipients, ';');
        $recipients = str_replace(' ', ';', $recipients);
        $recipients = str_replace(';;', ';', $recipients);
        return $recipients;
    }
}Теория
- Запах «завистливые функции»
- Рефакторинг «извлечение функции»
- Рефакторинг «перемещение метода»