Seguramente ha de ser por el hecho de que no estás usando un constructor correcto por ende $this->nombre no será inicializado al llamar $libro = new libro_visitas('libro.txt'); lo que luego termina enviando datos vacíos a fopen/fwrite/fclose.
Debería ser:
Código PHP:
function __construct($nombre)
{
$this->nombre = $nombre;
}
La única forma de que tu código actual funcione es que lo llamaras así:
Código PHP:
$libro = new libro_visitas();
$libro->construct('libro.txt');
....
Pero eso no es realmente una solución que valga la pena usar, simplemente acomoda el constructor y listo