Per potere si può, ma non è il metodo migliore. Il problema sono le variabili libere, se il tuo modello contiene Ciao $nome sei vincolato a rendere disponibile una variabile $nome nel contesto in cui verrà interpretato (non compilato!). Questo rende il codice difficile da mantenere o estendere, ma comunque può funzionare.
L'alternativa sono i template engine, per esempio Twig. Funzionano più o meno tutti allo stesso modo: tieni un modello in formato testuale da qualche parte (in un file o database) usando una sintassi particolare, per esempio Ciao {nome}, il modello viene letto dal codice PHP e il suo rendering viene reso disponibile come una funzione o un metodo di una classe, al quale va passato come parametro il contesto nel quale valutare il template, ovvero le variabili, che in questo modo non sono più libere.
Complessivamente viene un flusso di questo tipo:
Codice:
template_source = "Ciao {nome}"
template = TemplateEngine->load(template_source)
output = template.render(['nome' => 'Davide'])
print(output) // Ciao Davide
Se cerchi una soluzione più rapida o leggera e le tue necessità sono limitate alla sostituzione di stringe puoi anche fartelo a mano:
Codice PHP:
$template_source = "Ciao {nome}";
$output = str_replace(['{nome}'], ['Davide'], $template_source);
echo $output;
Meno efficiente ed elegante, ma adatto a contesti semplici.