Secondo me il problema sta qua
$this->$name();

il $ non c'entra col nome di un metodo.
$this->name();
è corretto.