Oi Ivan, tudo bom?
Boa pergunta! Na verdade, utilizar os métodos mágicos __get e __set pode parecer legal no começo mas eles geram exatamente essa necessidade que você comentou:
Caso eu precise criar uma condição específica (um if() ) para um dos atributos da classe?...
Esse tipo de if costuma prejudicar a manutenibilidade do nosso código já que, todo atributo novo que surgisse seria necessário adicionar nesse if. 
E, caso alguém esquecesse de adicionar os métodos mágicos teriam um comportamento inesperado (bug)
Ou seja, no final das contas, a melhor abordagem mesmo é utilizar um método get e um método set pra cada atributo da sua classe mesmo =)
Abraço