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]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
lexdevel
Отправлено: 15 Августа, 2013 - 00:05:33
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




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 крайне не рекомендуется, это деает код жёстко привязанным и не удобным. В дальнейшем такой код будет сложно модифицировать.


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



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




lexdevel пишет:
Вроде в одной зоне видимости

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var = "Test";
  3. function test() {
  4.   echo $var;
  5. }
  6. test(); // Undefined variable $var on line N
 
 Top
Okula
Отправлено: 15 Августа, 2013 - 00:09:34
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




DeepVarvar, лучше уж отказаться от этой функции вообще. А global я привёл как пример.
 
 Top
lexdevel
Отправлено: 15 Августа, 2013 - 00:10:26
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




DeepVarvar пишет:
lexdevel пишет:
Вроде в одной зоне видимости

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

Та уже догадался, но все равно непонятно/нелогично/непривычно, в общем, в голове не укладывается((
Спасибо за помощь!)
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Августа, 2013 - 00:12:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Okula пишет:
лучше уж отказаться от этой функции вообще
Почему?
Ты же свой велосипед на гитхабе не в одном файле писал.
Вот он тоже - все по полочкам раскладывает.
(Добавление)
lexdevel пишет:
в голове не укладывается
Вот на это короткое время в голову вложи, а потом выкинь и не вспоминай.
 
 Top
Okula
Отправлено: 15 Августа, 2013 - 00:15:56
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции.
lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Августа, 2013 - 00:20:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Okula пишет:
а тут функция ради функции
Так они всегда все структуры руками описывают - и это реально круто.
А ты сидишь и выпиливаешь из доступных костыликов (NULL, bool, int, float, resource, string, array, object, function) целое приложение.
Тебе никогда тесно в пыхе не было?
 
 Top
lexdevel
Отправлено: 15 Августа, 2013 - 00:20:54
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Okula пишет:
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции.
lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.

Не, это как раз понятно, не понятно, то, что я объявил (ну и у Вас было показано в примере) в зоне видимости выше (вроде как глобально) переменные, а они не видны из функций... Вот если в функции использовать переменные, то, понятное дело, они извне не видны)
 
 Top
Okula
Отправлено: 15 Августа, 2013 - 00:28:50
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Августа, 2013 - 00:30:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




lexdevel пишет:
а они не видны из функций
В javascript например видны. И если ф-ция вложена в ф-цию, объект или иную обертку, то искать будет поднимаясь вверх до самого global scope.
 
 Top
Okula
Отправлено: 15 Августа, 2013 - 00:33:44
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




DeepVarvar пишет:
Тебе никогда тесно в пыхе не было?

Бывало, но не так часто, там более если учесть как язык развивается в последнее время.
 
 Top
lexdevel
Отправлено: 15 Августа, 2013 - 00:36:06
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




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

Да уж... Логика... Остается только
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Августа, 2013 - 00:36:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Okula пишет:
как язык развивается в последнее время
Никуда он не развивается - сплошные костыли.
И лучше бы баги старые правили вместо нововведений своих.
Ядро бы поменяли - к чертям эту совместимость со старыми версиями.
(Добавление)
lexdevel пишет:
Остается только
lexdevel пишет:
throw new Exception(); die;

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

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



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)





пошел учить си. Стало интересно перевернуть мозги
 
 Top
lexdevel
Отправлено: 15 Августа, 2013 - 10:12:10
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




esterio пишет:

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

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

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

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

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

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

В общем, всем огромное спасибо за помощь! Буду курить дальше...
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB