Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
kOROED
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
1

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

05.03.2014, 12:05. Просмотров 471. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 12:05
Ответы с готовыми решениями:

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

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

Вернуть значение рекурсивной функции
Доброго времени суток! function calc($a,$b){ if ($a==0){ echo...

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

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

2
Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
06.03.2014, 18:53 2
Как в рекурсивных запусках получить первое значение переменной $dir, которое было передано при вызове функции?
Может быть, создать какой-нибудь сингтон, сделать ему приватное поле (можно статическое), и при создании (этого сингтона) его заполнять $dir, таким образом оно заполнится один раз (хотя, что-то подсказывает мне, что это извращение)?
1
Para bellum
Эксперт PHP
4099 / 3049 / 983
Регистрация: 06.01.2011
Сообщений: 8,926
06.03.2014, 19:17 3
Мне кажется всё проще. Не знаю, насколько правилен такой вариант, но всё же...
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2014, 19:17

Глобальная переменная не видна в функции
Может я что не так делаю, но $DOCUMENT_ROOT не видна в функции... если в...

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

Глобальная переменная в качестве аргумента функции
Доброго времени суток! :) Есть вопрос: пишу function внутри php файла, т.е....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru