В 8 главе этой книги вы можете найти очень подробный ответ на свой вопрос.
Вкратце: используйте Композиция или Фабрики.(см. ответ Уэсли ван Опдорпа).
Кроме того, избегайте использования строковых аргументов как перечислимых: $viewmode = 'visitor'
с этим аргументом, вам придется хранить в памяти все возможные значения этого аргумента.Или загляните в код функции, чтобы запомнить их.И эти значения являются строками - хорошее место для опечаток.Кроме того, будет очень сложно изменить значения в функции, поскольку все вызовы этого метода будут содержать жестко закодированные строки.
Использовать константы класса:
class AdWriter {
const view_mode_visitor = 1;
...
Также, $adState
- неправильный код,должно быть $ ad-> state.Но использование открытых полей - это тоже плохая практика :)