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
Форумы портала PHP.SU :: Версия для печати :: Вызов функции, в которой есть SQL из другого файла [2]
Форумы портала PHP.SU » » Вопросы новичков » Вызов функции, в которой есть SQL из другого файла

Страниц (3): « 1 [2] 3 »
 

16. lexdevel - 15 Августа, 2013 - 00:05:33 - перейти к сообщению
Okula пишет:
lexdevel, ничего у тебя не будет видно.
Переменные $mysql_host, $mysql_user, $mysql_pass и $mysql_base не видны внутри функции registerUser() потому что у них разные области видимости.
Как заставить их быть видными внутри функции: использовать ключевое слово global
Выглядеть будет так:
PHP:
скопировать код в буфер обмена
  1. $mysql_host = ""; // Host
  2. $mysql_user = ""; // User
  3. $mysql_pass = ""; // Password
  4. $mysql_base = ""; // Database Name
  5.  
  6.  
  7. function registerUser($login, $password) {
  8.     global $mysql_host, $mysql_user, $mysql_pass, $mysql_base;
  9.     $link = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_base);
  10.     // ... etc
  11.     // if some error -> return false;
  12.     mysqli_close($link);
  13.     return true;
  14. }

Вот теперь всё будет работать. Но использовать ключевое слово global крайне не рекомендуется, это деает код жёстко привязанным и не удобным. В дальнейшем такой код будет сложно модифицировать.


Странно... Вроде в одной зоне видимости, хотя не буду спорить, мне просто сложно это понять, вот и все... Спасибо за ответ) Если не рекомендуется, то лучше оставлю на "план Б")
17. DeepVarvar - 15 Августа, 2013 - 00:08:31 - перейти к сообщению
lexdevel пишет:
Вроде в одной зоне видимости

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var = "Test";
  3. function test() {
  4.   echo $var;
  5. }
  6. test(); // Undefined variable $var on line N
18. Okula - 15 Августа, 2013 - 00:09:34 - перейти к сообщению
DeepVarvar, лучше уж отказаться от этой функции вообще. А global я привёл как пример.
19. lexdevel - 15 Августа, 2013 - 00:10:26 - перейти к сообщению
DeepVarvar пишет:
lexdevel пишет:
Вроде в одной зоне видимости

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var = "Test";
  3. function test() {
  4.   echo $var;
  5. }
  6. test(); // Undefined variable $var on line N

Та уже догадался, но все равно непонятно/нелогично/непривычно, в общем, в голове не укладывается((
Спасибо за помощь!)
20. DeepVarvar - 15 Августа, 2013 - 00:12:08 - перейти к сообщению
Okula пишет:
лучше уж отказаться от этой функции вообще
Почему?
Ты же свой велосипед на гитхабе не в одном файле писал.
Вот он тоже - все по полочкам раскладывает.
(Добавление)
lexdevel пишет:
в голове не укладывается
Вот на это короткое время в голову вложи, а потом выкинь и не вспоминай.
21. Okula - 15 Августа, 2013 - 00:15:56 - перейти к сообщению
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции.
lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.
22. DeepVarvar - 15 Августа, 2013 - 00:20:17 - перейти к сообщению
Okula пишет:
а тут функция ради функции
Так они всегда все структуры руками описывают - и это реально круто.
А ты сидишь и выпиливаешь из доступных костыликов (NULL, bool, int, float, resource, string, array, object, function) целое приложение.
Тебе никогда тесно в пыхе не было?
23. lexdevel - 15 Августа, 2013 - 00:20:54 - перейти к сообщению
Okula пишет:
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции.
lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.

Не, это как раз понятно, не понятно, то, что я объявил (ну и у Вас было показано в примере) в зоне видимости выше (вроде как глобально) переменные, а они не видны из функций... Вот если в функции использовать переменные, то, понятное дело, они извне не видны)
24. Okula - 15 Августа, 2013 - 00:28:50 - перейти к сообщению
lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.
25. DeepVarvar - 15 Августа, 2013 - 00:30:19 - перейти к сообщению
lexdevel пишет:
а они не видны из функций
В javascript например видны. И если ф-ция вложена в ф-цию, объект или иную обертку, то искать будет поднимаясь вверх до самого global scope.
26. Okula - 15 Августа, 2013 - 00:33:44 - перейти к сообщению
DeepVarvar пишет:
Тебе никогда тесно в пыхе не было?

Бывало, но не так часто, там более если учесть как язык развивается в последнее время.
27. lexdevel - 15 Августа, 2013 - 00:36:06 - перейти к сообщению
Okula пишет:
lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.

Да уж... Логика... Остается только
28. DeepVarvar - 15 Августа, 2013 - 00:36:16 - перейти к сообщению
Okula пишет:
как язык развивается в последнее время
Никуда он не развивается - сплошные костыли.
И лучше бы баги старые правили вместо нововведений своих.
Ядро бы поменяли - к чертям эту совместимость со старыми версиями.
(Добавление)
lexdevel пишет:
Остается только
lexdevel пишет:
throw new Exception(); die;

Спойлер (Отобразить)
Радость
Чтобы оно корректно перехватилось - надо обязательно завернуть его в try { ... } catch (...) { ... }
(Добавление)
lexdevel пишет:
Да уж... Логика...
Добавлю еще логики пхп, что в каком бы месте не инклюдился файл с кодом, если в нем есть переменные - они падают в ту область видимости где произошло подключение, а если в подключаемом коде есть ф-ция, то она падает в global scope. Радость
(Добавление)
Вобщем пиши как и что получилось наковырять.
Со стороны довольно интересно наблюдать сдвиг логики.

На самом деле на пыха гнать не надо - тут есть свои нюансы реализации интерпретируемого языка, что накладывает такие вот особенности очень похожие на костыли.
А все потому, что они не хотят отказываться от старого ядра сразу, оставляя поддержку предыдущих версий.
29. esterio - 15 Августа, 2013 - 02:57:48 - перейти к сообщению

пошел учить си. Стало интересно перевернуть мозги
30. lexdevel - 15 Августа, 2013 - 10:12:10 - перейти к сообщению
esterio пишет:

пошел учить си. Стало интересно перевернуть мозги

Правильный выбор)

DeepVarvar пишет:
Вобщем пиши как и что получилось наковырять.
Со стороны довольно интересно наблюдать сдвиг логики.

Да наковырял пока по объявлениям global в функциях, где используются переменные, т.к. другой метод не очень подходит, поскольку все таки, я считаю, что объявлять везде переменные для соединения с мускулом есть нелогично, они должны быть видны отовсюду, на то, в принципе, и было разделение... Пока есть косяки, но в БД уже пишет, однако остались косяки с отказом формировать страницу...

DeepVarvar пишет:
На самом деле на пыха гнать не надо - тут есть свои нюансы реализации интерпретируемого языка, что накладывает такие вот особенности очень похожие на костыли.
А все потому, что они не хотят отказываться от старого ядра сразу, оставляя поддержку предыдущих версий.

Да тут не гон, скорее недопонимание... Опять же, javascript как-то более логичен (опять же с точки зрения сишника Радость), а тут не до конца еще...

В общем, всем огромное спасибо за помощь! Буду курить дальше...

 

Powered by ExBB FM 1.0 RC1