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 :: Вызов функции, в которой есть SQL из другого файла [2]
Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013
Помог: 0 раз(а)
Okula пишет:
lexdevel, ничего у тебя не будет видно.
Переменные $mysql_host, $mysql_user, $mysql_pass и $mysql_base не видны внутри функции registerUser() потому что у них разные области видимости.
Как заставить их быть видными внутри функции: использовать ключевое слово global
Выглядеть будет так:
Вот теперь всё будет работать. Но использовать ключевое слово global крайне не рекомендуется, это деает код жёстко привязанным и не удобным. В дальнейшем такой код будет сложно модифицировать.
Странно... Вроде в одной зоне видимости, хотя не буду спорить, мне просто сложно это понять, вот и все... Спасибо за ответ) Если не рекомендуется, то лучше оставлю на "план Б")
DeepVarvar
Отправлено: 15 Августа, 2013 - 00:08:31
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции. lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.
DeepVarvar
Отправлено: 15 Августа, 2013 - 00:20:17
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Okula пишет:
а тут функция ради функции
Так они всегда все структуры руками описывают - и это реально круто.
А ты сидишь и выпиливаешь из доступных костыликов (NULL, bool, int, float, resource, string, array, object, function) целое приложение.
Тебе никогда тесно в пыхе не было?
Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013
Помог: 0 раз(а)
Okula пишет:
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции. lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.
Не, это как раз понятно, не понятно, то, что я объявил (ну и у Вас было показано в примере) в зоне видимости выше (вроде как глобально) переменные, а они не видны из функций... Вот если в функции использовать переменные, то, понятное дело, они извне не видны)
Okula
Отправлено: 15 Августа, 2013 - 00:28:50
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.
DeepVarvar
Отправлено: 15 Августа, 2013 - 00:30:19
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
lexdevel пишет:
а они не видны из функций
В javascript например видны. И если ф-ция вложена в ф-цию, объект или иную обертку, то искать будет поднимаясь вверх до самого global scope.
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
DeepVarvar пишет:
Тебе никогда тесно в пыхе не было?
Бывало, но не так часто, там более если учесть как язык развивается в последнее время.
lexdevel
Отправлено: 15 Августа, 2013 - 00:36:06
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013
Помог: 0 раз(а)
Okula пишет:
lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Okula пишет:
как язык развивается в последнее время
Никуда он не развивается - сплошные костыли.
И лучше бы баги старые правили вместо нововведений своих.
Ядро бы поменяли - к чертям эту совместимость со старыми версиями. (Добавление)
~$ php test.php
PHP Fatal error: Uncaught exception 'Exception' in /home/deep/test.php:1
Stack trace:
#0 {main}
thrown in /home/deep/test.php on line 1
Чтобы оно корректно перехватилось - надо обязательно завернуть его в try { ... } catch (...) { ... } (Добавление)
lexdevel пишет:
Да уж... Логика...
Добавлю еще логики пхп, что в каком бы месте не инклюдился файл с кодом, если в нем есть переменные - они падают в ту область видимости где произошло подключение, а если в подключаемом коде есть ф-ция, то она падает в global scope. (Добавление)
Вобщем пиши как и что получилось наковырять.
Со стороны довольно интересно наблюдать сдвиг логики.
На самом деле на пыха гнать не надо - тут есть свои нюансы реализации интерпретируемого языка, что накладывает такие вот особенности очень похожие на костыли.
А все потому, что они не хотят отказываться от старого ядра сразу, оставляя поддержку предыдущих версий.
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
пошел учить си. Стало интересно перевернуть мозги
lexdevel
Отправлено: 15 Августа, 2013 - 10:12:10
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013
Помог: 0 раз(а)
esterio пишет:
пошел учить си. Стало интересно перевернуть мозги
Правильный выбор)
DeepVarvar пишет:
Вобщем пиши как и что получилось наковырять.
Со стороны довольно интересно наблюдать сдвиг логики.
Да наковырял пока по объявлениям global в функциях, где используются переменные, т.к. другой метод не очень подходит, поскольку все таки, я считаю, что объявлять везде переменные для соединения с мускулом есть нелогично, они должны быть видны отовсюду, на то, в принципе, и было разделение... Пока есть косяки, но в БД уже пишет, однако остались косяки с отказом формировать страницу...
DeepVarvar пишет:
На самом деле на пыха гнать не надо - тут есть свои нюансы реализации интерпретируемого языка, что накладывает такие вот особенности очень похожие на костыли.
А все потому, что они не хотят отказываться от старого ядра сразу, оставляя поддержку предыдущих версий.
Да тут не гон, скорее недопонимание... Опять же, javascript как-то более логичен (опять же с точки зрения сишника ), а тут не до конца еще...
В общем, всем огромное спасибо за помощь! Буду курить дальше...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.