Hay varios problemas con su código.
Se explicaron dos en la otra respuesta, lo que hará que tu código funcione (finalmente, todo se arruinó), pero sigue siendo un enfoque incorrecto, que se conectará a la base de datos tantas veces como objetos tenga .
Cambie la clase de DatabaseConnection de esta manera
class DatabaseConnection{
public $pdo;
public function __construct(){
$user = 'root';
$pass = '';
$dsn = 'mysql:charset=utf8;dbname=test;host=localhost;charset=utf8';
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
$this->pdo = new PDO($dsn, 'root', '', $opt);
}
}
Cambie el constructor LoginRegister de esta manera
function __construct($db){
$this->db= $db;
}
Y haz register.php de esta manera
require_once "functions.php";
$db = new DatabaseConnection();
$user = new LoginRegister($db->pdo);
y luego en LoginRegister use $this->db
en lugar de $pdo
todo el camino.
La idea principal es hacer que la conexión $db sea un servicio externo para la clase de aplicación. De lo contrario, será lo mismo que despreciado global, pero solo en otra forma.