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 :: Вопрос по пользовательской функции.

 PHP.SU

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


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

> Без описания
qtk
Отправлено: 09 Апреля, 2013 - 11:44:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Такая ситуация, внутри пользовательской функции находится вторая пользовательская функция, в первую функцию я передаю аргумент. Вопрос, как сделать чтобы этот аргумент был виден во второй функции? Переменная $GLOBALS в данном случае не работает! Заранее спасибо!
Вот пример чего бы хотелось:
PHP:
скопировать код в буфер обмена
  1.  
  2. function foo($data) {
  3.     function bar() {
  4.         echo $data;
  5.     }
  6. }
  7. foo('text');
  8.  

Вариант такого типа не подходит:
PHP:
скопировать код в буфер обмена
  1.  
  2. function foo($data) {
  3.     function bar($data) {
  4.         echo $data;
  5.     }
  6. }
  7. foo('text');
  8.  
 
 Top
preproger
Отправлено: 09 Апреля, 2013 - 11:48:22
Post Id


Гость


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


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




PHP:
скопировать код в буфер обмена
  1. function foo($data) {
  2.     function bar() {
  3.         global $data;
  4.         echo $data;
  5.     }
  6. }
  7.  
  8. foo('text');
 
 Top
esterio
Отправлено: 09 Апреля, 2013 - 11:52:32
Post Id



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


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


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




Что за н*х
PHP:
скопировать код в буфер обмена
  1. function foo($data) {
  2.     bar($data);
  3. }
  4.  
  5. function bar($data) {
  6.         echo $data;
  7. }
  8. foo('text');
 
 Top
armancho7777777 Супермодератор
Отправлено: 09 Апреля, 2013 - 11:54:26
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




qtk, зачем Вам такая конструкция ?
Дважды эту функцию все равно не вызвать,
так как получите фатальную ошибку:
Fatal error: Cannot redeclare bar()
При вызове foo() дважды, во второй раз будет попытка переопределения функции bar()
 
 Top
qtk
Отправлено: 09 Апреля, 2013 - 11:58:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




это для разных пользователей переменная $data будет меняться. Global в данном случае не работает не работает вот поэтому и пишу сюда.
 
 Top
esterio
Отправлено: 09 Апреля, 2013 - 12:03:56
Post Id



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


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


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




приведите кусок кода где не работает.
 
 Top
qtk
Отправлено: 09 Апреля, 2013 - 12:10:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Я извиняюсь зачем кусок кода, вот пример в верху, короткий и ясный! В куске кода тоже самое функция внутри функции.
 
 Top
A-MySelf
Отправлено: 09 Апреля, 2013 - 12:12:47
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Нояб. 2012  


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




PHP:
скопировать код в буфер обмена
  1. function foo($data)
  2. {
  3.   function bar() use $data
  4.   {
  5.      echo $data;
  6.   }
  7.  
  8.   bar();
  9. }
  10.  
 
 Top
DelphinPRO
Отправлено: 09 Апреля, 2013 - 12:16:42
Post Id



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


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


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




qtk пишет:
Вариант такого типа не подходит:

и тем, не менее, это единственный вариант.

слегка доработан
PHP:
скопировать код в буфер обмена
  1. function foo($data) {
  2.  
  3.         if (!function_exists('bar')){
  4.                 function bar($data) {
  5.                         echo $data;
  6.                 }
  7.         }
  8.        
  9.         bar($data);
  10. }
  11.  
  12. foo('text');
  13. foo('text2');

(Добавление)
и не понятно почему он не подходит? объясните, может вы где-то заблуждаетесь?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 09 Апреля, 2013 - 12:19:16
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Тогда уж так:
PHP:
скопировать код в буфер обмена
  1.  
  2. function foo($data)
  3. {
  4.   $bar = function() use ($data)
  5.   {
  6.      echo $data;
  7.   }
  8.   $bar();
  9. }
  10.  
 
 Top
qtk
Отправлено: 09 Апреля, 2013 - 12:20:20
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Не подходит лишь потому, что мне не нравятся эти, на мой взгляд лишние аргументы в bar()
(Добавление)
Просто хотелось узнать можно ли реализовать все это с помощью $GLOBALS или global
 
 Top
DelphinPRO
Отправлено: 09 Апреля, 2013 - 12:23:11
Post Id



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


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


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




qtk пишет:
Не подходит лишь потому, что мне не нравятся эти, на мой взгляд лишние аргументы в bar()

Это, изините, не аргумент. Мало ли что вам не нравится. У языка есть синтаксис и правила, по которым пишется код.

Предлагаю вариант - форкнуть php и собрать себе персональную версию, которая будет работать так, как вам надо


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 09 Апреля, 2013 - 12:24:08
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




qtk, последний пример чем не угодил ?)
 
 Top
qtk
Отправлено: 09 Апреля, 2013 - 12:24:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Да я не протестую, просто хотел узнать, если нет то нет. Всем спасибо за помощь!
 
 Top
DelphinPRO
Отправлено: 09 Апреля, 2013 - 12:25:33
Post Id



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


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


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




нет, если из академического интереса, чисто для того, чтобы заюзать глобалс, то пожалуйста
PHP:
скопировать код в буфер обмена
  1. function foo($data) {
  2.         $GLOBALS['data'] = $data;
  3.         if (!function_exists('bar')){
  4.                 function bar() {
  5.                         echo $GLOBALS['data'];
  6.                 }
  7.         }
  8.        
  9.         bar();
  10. }
  11.  
  12. foo('text');
  13. foo('text2');


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB