Почему PHP не создаёт объект из подключаемого файла через функцию?
Почитайте про __autoload.
А использование глобальных переменных как минимум может привести к случайному изменению её в каком-либо участке кода, и появлению в связи с этим проблем и багов, поэтому старайтесь глобалами не увлекаться.
Попробуйте$mysqli = new mysqli('localhost', 'user', 'pass', 'database');
заменить на$GLOBALS['mysqli'] = new mysqli('localhost', 'user', 'pass', 'database');
Дело в том, что вы require вызываете внутри функции, и $mysqli создается внутри функции и за ее пределами не существует.