@Niconix

Работает ли в PHP global в обратном направлении?

Идея такая - если в функции подключения к БД вместо return поставить global станет ли глобальной локальная переменная функции?

function sql_connect() {
  $link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
  if (!$link) {
    die('Ошибка подключения (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
  } else {
    global $link;
  }
}
  • Вопрос задан
  • 2767 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
Все элементарно. :)

$GLOBALS['link'] = $link;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега PHP
♬♬
Посмотрите про область видимости переменных в PHP.

В том виде, как вы записали, global сработает вне зависимости от выполнения условия. Если очень хочется именно по условию, разместите строку с global в отдельном файле и включаейте его по условию:
if( $link) {
    include("my_global.php");
}


Но по-хорошему, вам надо весь ваш код обернуть в один класс, $link сделать его свойством, а в функции, в случае удачи определения внутренней переменной $_link, передавать значение свойству:
if( ...){
    $this->link = $_link;
}
Ответ написан
@mxlpitelik
Ещё один вариант:

1) обьявить где-то вначале перменную $link

$link=null; //к примеру

2) а далее просто через функцию получить доступ к глобальной перемнной и записть в неё значение если надо
function sql_connect() {

global $link; //делаем в функции видимой глобальную переменную

//т.к. теперь $link - это переменная вне функции, то результат подключения записываем в локальную переменную
  $local_link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db'); 
  if (!$local_link) {
    die('Ошибка подключения (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
  } else {
//если всё получилось - передаем значение глобальной перемнной
    $link=$local_link;
  }
}


Но как уже написал sergiks, так делать не надо.

P.S. - Я бы кстати переходил на PDO вместо mysqlLi - функций больше скорость немного выше, и полностью универсальна, благодаря чему при переходе на другую СУБД избавит от головной боли...
Ответ написан
У Вас боязнь глобальных функций?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы