проблема с вызовом ф-ции, содержащеий вложенные ф-ции

delta9

Guest
проблема с вызовом ф-ции, содержащеий вложенные ф-ции

есть библиотека lib_some.php:
<?
function parent_func($a, $b){
fucntion child_func(){
..some code..
return 0;
}
..some code..
$c = child_func();
..some code..
}
?>

есть скрипт script.php:
#!/usr/local/bin/php
<?
require_once("lib_some.php");
for ($i = 0; $i< = 10; $i++) {
echo $i."\n";
$er = parent_func($i, 1);
}
?>
при вызове:
$ ./script.php
0
PHP Fatal error: Cannot redeclare child_func() (previously declared in lib_some.php:100) in lib_some.php on line 95

PHP Fatal error: Cannot redeclare child_func() (previously declared in lib_some.php:100) in lib_some.php on line 95

Т.е. - происходит только один вызов parent_func() - а потом идет ошибка :(

подскажите, люди добрые, как это побороть?
 

tony2001

TeaM PHPClub
вложенные функции не поддерживались никогда и не планируются.
 

tony2001

TeaM PHPClub
где и что работает?
если работает, то в чем проблема тогда?
 

delta9

Guest
работает в том плане, что один вызов parent_func(вместе со всеми вложенными ф-циями) проходит нормально
не работает в том плане, что послед. вызовы обламываются
 

azamat

Guest
Ты пытаешься где-то переобъявить функцию, судя по ошибкам.
Наверное несколько раз подключаешь свою библиотеку.

-~{}~ 28.09.04 15:40:

Сорри, плохо посмотрел код.
 

tony2001

TeaM PHPClub
>Ты пытаешься где-то переобъявить функцию, судя по ошибкам.
именно так.
у него при выполнении функции объявляется другая функция.
причем, доступна она только в родительской иначально.
но при каждом вызове родительской она переопределяется (точней, пытается переопределиться).
это работать не будет, как я уже сказал.
 

delta9

Guest
Автор оригинала: azamat
Ты пытаешься где-то переобъявить функцию, судя по ошибкам.
Наверное несколько раз подключаешь свою библиотеку.
это я понял - не понял почему это происходит?
и как можно вложенные ф-ции изолировать от внешнего кода? ( не совсем толково выразился )

-~{}~ 28.09.04 15:47:

Автор оригинала: tony2001
это работать не будет, как я уже сказал.
а как сделать что-бы работало?
я-ж собственно за этим на форум и пришел :)
 

azamat

Guest
Угу, я уже тоже это понял, я за библиотеку извинялся).
 

tony2001

TeaM PHPClub
delta9
вынести вложенную функцию из "родителя" и объявлять её нормально.
 

Sir_J

Guest
а почему бы так не сделать:
<?
fucntion child_func(){
..some code..
return 0;
}
function parent_func($a, $b){
..some code..
$c = child_func();
..some code..
}
?>
???
 

delta9

Guest
2 Sir_J & tony2001 :
это решение настолько очевидно - что я даже не стал его рассматривать :)
к тому-же таким макаром lib_some засоряется кучей мелких ф-ций, которые нигде и никем кроме как parent_func использоваться не будут.
 

catoffsky

Guest
Originally posted by delta9
2 Sir_J & tony2001 :
это решение настолько очевидно - что я даже не стал его рассматривать :)
к тому-же таким макаром lib_some засоряется кучей мелких ф-ций, которые нигде и никем кроме как parent_func использоваться не будут.
значит такие конструкции вообще не надо объявлять как функции
 

delta9

Guest
нашел решение -
PHP:
function parent_func($a, $b){
   if (! function_exists('child_func') ) {
     fucntion child_func(){
       ..some code..
      return 0;
    }
   }
   ..some code..
   $c = child_func();
   return $c;
}

Автор оригинала: catoffsky
значит такие конструкции вообще не надо объявлять как функции
спорное замечание :)
 

Фанат

oncle terrible
Команда форума
спорное здесь только одно - сам вопрос, который рожден смесью неграмотности с извращениями.
 

delta9

Guest
Автор оригинала: Фанат
спорное здесь только одно - сам вопрос, который рожден смесью неграмотности с извращениями.
типа поругаться хотим?
 

Фанат

oncle terrible
Команда форума
С кем - с тобой, что ли?
А ты, типа, можешь, даже?
Что-то связное сказать в объяснение этой белиберды?
Да так, чтобы весь форум не попадал от смеха?
Очень интересно.
мы все с удовольствием послушаем.
 

catoffsky

Guest
спорное замечание :)
я просто пытался что то подобное изображать - а потом избавился от вложенной фукции путём добавленя её кода к коду основной ... получилось гораздо изящнее чем я себе это сначала представлял ... вот и подумал что у тебя возможно похожая ситуация
 

delta9

Guest
Автор оригинала: Frol
delta9
ха-ха.
насмешил.
изолировал он ее. =)))
тебе может и смешно - а мне пофиг - работает и это главное.
И в чем вообще проблема с использованием вложенных ф-ций:
  • Не круто? - отмазка для лохов
  • Трудности при отладке? - серьезное замечание, но на самом деле не критично
  • Потеря производительности?
Вы-таки не стесняйтесь - объясните! Я думаю форумы для этого и существуют, а не для выставляния других ламерами...

-~{}~ 28.09.04 18:31:

Автор оригинала: catoffsky
я просто пытался что то подобное изображать - а потом избавился от вложенной фукции путём добавленя её кода к коду основной ... получилось гораздо изящнее чем я себе это сначала представлял
время для оптимизации кода еще не пришло - щас главное работающий "прототип" :)
 
Сверху