Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблема с видимостью глобальных переменных в callback-функции
В функции записи сессии пытаюсь использовать глобальные переменные $db(PDO), $tbl_sess(название таблицы) и $utils(класс утилит).
Собственно, если вызывать функцию напрямую из любой точки скрипта, то все работает, но когда функция вызывается коллбэком параметры $utils и $db пусты, $tbl_sess выдается.
Ну и соответственно выдает ошибку Fatal error: Call to a member function prepare() on a non-object in .../functions.php on line 150
Не подскажите, что делать в данной ситуации?
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
global? Глобальные переменные - зло, использовать классы ради классов - тоже зло.
Глобальные объекты не видны, по той причине, что коллбек write вызывается после уничтожения объектов.
Вот, почитай https://bugs.php.net/bug.php?id=50154
Решение - вызывать session_write_close из деструктора.
DeNCHiK01
Отправлено: 16 Февраля, 2015 - 07:26:12
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Добавил вызов из деструктора, если я, конечно, все правильно сделал, но проблема осталась
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
Если это при вызове bind_param(), то в mysqli есть оговорка по ее использованию! Не исключено, что в PDO может быть также... Хотя в документации не нашел!
Цитата:
При использовании mysqli_stmt_bind_param() совместно с call_user_func_array() необходимо соблюдать особую осторожность. Нужно принимать во внимание, что mysqli_stmt_bind_param() принимает в качестве параметров только ссылки на значения, в то время как call_user_func_array() принимает список параметров, которые могут передаваться как по ссылке, так и по значению.
У меня была похожая проблема, и ошибка такая же выводилась с колбэк функцией, только в mysqli c bind_param. Решил вот такой вот затычкой
Покинул форум
Сообщений всего: 10
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Bio man пишет:
DeNCHiK01, попробуй альтернативную декларацию session_set_save_handler, через интерфейс. (Добавление)
на php.su устаревшая документация. http://php.net/manual/en/function.session-set-save-handler.php
Доступно только на 5.4+, у меня стоит 5.3.3. Стоит обновлять?
Bio man
Отправлено: 17 Февраля, 2015 - 19:51:28
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
DeNCHiK01 пишет:
Стоит обновлять?
читай чейнджлог, если будут изменения без обратной совместимости, и если проект большой, то лучше не стоит.
Если проект небольшой и обнаружатся какие то несовместимости, то их можно быстро поправить.
5.3 версия умерла, она официально не поддерживается, скоро с 5.4 случится тоже самое.
Так что лучше идти в ногу со временем.
DeNCHiK01
Отправлено: 17 Февраля, 2015 - 20:26:30
Новичок
Покинул форум
Сообщений всего: 10
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Bio man пишет:
DeNCHiK01 пишет:
Стоит обновлять?
читай чейнджлог, если будут изменения без обратной совместимости, и если проект большой, то лучше не стоит.
Если проект небольшой и обнаружатся какие то несовместимости, то их можно быстро поправить.
5.3 версия умерла, она официально не поддерживается, скоро с 5.4 случится тоже самое.
Так что лучше идти в ногу со временем.
Как раз проект еще не слишком большой, противоречий не нашел в чейнджлоге.
На какую версию лучше перейти? 5.6.5?
Bio man
Отправлено: 17 Февраля, 2015 - 22:26:02
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.