Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для kOROED
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146

Статическая переменная в рекурсивной функции

05.03.2014, 12:05. Показов 1572. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть рекурсивная функция для сканирования директории:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <?
     
    function scan(&$dir) {
            $list = "";
            foreach(glob("$dir*") as $item) {
                    if (is_dir($item)) {
                            $dir = $item."/";
                            $item = "<b>$item</b>".scan($dir);
                            }
                    $list .= "<ul><li>$item</li></ul>";
                    }
            return $list;
            }
     
    $dir = "";
    echo scan($dir);
     
    ?>
Как мне сделать, чтобы определённый код выполнялся бы только при первом запуске функции и не выполнялся бы при рекурсивных запусках? Как в рекурсивных запусках получить первое значение переменной $dir, которое было передано при вызове функции?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2014, 12:05
Ответы с готовыми решениями:

Статическая переменная
&lt;html&gt;&lt;body&gt; &lt;?php function selfcount() { static $count = 0; $count++; echo $count; } for($i=0; $i&lt;5; $i++) selfcount();...

Вернуть значение рекурсивной функции
Доброго времени суток! function calc($a,$b){ if ($a==0){ echo &quot;inkrement&lt;br&gt;&quot;; $res = $res + 1; } else{ for...

Не работает возврат из рекурсивной функции
echo test (1); function test ($a) { echo $a . &quot;&lt;br&gt;&quot;; if ($a == 10) { //echo $a-$a; return $a-$a; } $a++; test...

2
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
06.03.2014, 18:53
Как в рекурсивных запусках получить первое значение переменной $dir, которое было передано при вызове функции?
Может быть, создать какой-нибудь сингтон, сделать ему приватное поле (можно статическое), и при создании (этого сингтона) его заполнять $dir, таким образом оно заполнится один раз (хотя, что-то подсказывает мне, что это извращение)?
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
06.03.2014, 19:17
Мне кажется всё проще. Не знаю, насколько правилен такой вариант, но всё же...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
     
    function scan(&$dir, $outside=false) {
            
            # Если функция вызвана извне
            if( $outside )
            {
                # Выполняем код
            }
            
            $list = "";
            foreach(glob("$dir*") as $item) {
                    if (is_dir($item)) {
                            $dir = $item."/";
                            $item = "<b>$item</b>".scan($dir);
                            }
                    $list .= "<ul><li>$item</li></ul>";
                    }
            return $list;
            }
     
    $dir = "";
    echo scan($dir, true);
     
    ?>
Если функцию "scan" Вы вызываете извне, то вторым аргументом указываете "true". Если изнутри вызываете - вообще не указываете второй аргумент.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2014, 19:17
Помогаю со студенческими работами здесь

Где объявить переменную в рекурсивной функции?
Всем привет, что-то туплю уже под конец дня function ct($list, $id) { foreach($list as $value) { if($value ==...

Не выводится переменная в функции
&lt;?php function asd() { echo $ASD;//Почему эта переменная не выводится? &quot;asd&quot; not cout } if(isset($_POST)) { $ASD =...

Глобальная переменная не видна в функции
Может я что не так делаю, но $DOCUMENT_ROOT не видна в функции... если в строке $d=opendir('$DOCUMENT_ROOT/gallery/$dir'); вместо ...

Глобальная переменная вне функции
Такой незамысловатый код. По идее переменная $k - глобальная, и функция должна её видеть. На деле этого не происходит. static - не в...

Глобальная переменная в качестве аргумента функции
Доброго времени суток! :) Есть вопрос: пишу function внутри php файла, т.е. что-то типа такого: &lt;?php ... function xz() { }...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru