Почему PHP не создаёт объект из подключаемого файла через функцию?

Пытаюсь извратится с таким кодом:
function to_plug($array_plug)	{
	foreach($array_plug as $val) {
		require ($_SERVER['DOCUMENT_ROOT'].'/sys/'.$val.'.php');
	}
}
to_plug(array('database'));

$query = 'SELECT login FROM users WHERE user_id = 1';
if ($result = $mysqli->query($query)) {
	$answer = $result->fetch_assoc();
	$result->close();
}
$mysqli->close();

Функция to_plug, чтобы подключать несколько файлов одной строчкой.

В результате файл подключается (на экране есть вывод printf от туда), но объект $mysqli не создаётся.
PHP ругается Fatal error: Uncaught Error: Call to a member function query() .

Если подключить напрямую без чудо конструкции:
require ($_SERVER['DOCUMENT_ROOT'].'/sys/database.php');


То всё работает, объект есть.

Как правильно создать объект из функции с циклом?

Содержимое database.php:
<?
/* Подключение к серверу MySQL */
$mysqli = new mysqli('localhost', 'user', 'pass', 'database');

if (mysqli_connect_errno()) {
	printf("Connecting to the MySQL server is not possible. Error code:  %s\n", mysqli_connect_error());
	exit; 
}
else print 'connect';
?>
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
alsopub
@alsopub
Попробуйте
$mysqli = new mysqli('localhost', 'user', 'pass', 'database');

заменить на
$GLOBALS['mysqli'] = new mysqli('localhost', 'user', 'pass', 'database');

Дело в том, что вы require вызываете внутри функции, и $mysqli создается внутри функции и за ее пределами не существует.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stunoff
Почитайте про __autoload.
А использование глобальных переменных как минимум может привести к случайному изменению её в каком-либо участке кода, и появлению в связи с этим проблем и багов, поэтому старайтесь глобалами не увлекаться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы