Dans ce cas là, c'est clairement une factory que tu veux faire.
Ta fonction 'f' au lieu de retrouver un nom de classe à utiliser, peut directement te donner le classe véhicule dont tu as besoin.
imaginons que ta fonction 'f' soit en fait une méthode statique 'genererVehicule( $typeVehicule )', contenu dans une classe 'VehiculeFactory'.
Il te reste donc à faire ceci
Par contre l'idéal serait que chacun de tes véhicules implémentent une interface IVehicule (qui contiendrait tes méthodes démarrer, freiner et accélérer) pour avoir un code plus clair.
Ta fonction 'f' au lieu de retrouver un nom de classe à utiliser, peut directement te donner le classe véhicule dont tu as besoin.
imaginons que ta fonction 'f' soit en fait une méthode statique 'genererVehicule( $typeVehicule )', contenu dans une classe 'VehiculeFactory'.
Il te reste donc à faire ceci
$vehicule = VehiculeFactory::genererVehicule( $type ) ;
$vehicule->demarre() ;
$vehicule->freine() ;
$vehicule->accelere() ;
Par contre l'idéal serait que chacun de tes véhicules implémentent une interface IVehicule (qui contiendrait tes méthodes démarrer, freiner et accélérer) pour avoir un code plus clair.