Задать вопрос
@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;
  }
}
  • Вопрос задан
  • 2771 просмотр
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 - функций больше скорость немного выше, и полностью универсальна, благодаря чему при переходе на другую СУБД избавит от головной боли...
Ответ написан
У Вас боязнь глобальных функций?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽