Почему require_once обнуляет имя переменной на последней итерации readdir()?

Почему require_once очищает имя переменной на последней итерации readdir()?

$added = array();
$folder = 'database';
$contents = opendir($folder);

while($filename = readdir($contents)){
    if(! is_dir($filename) ) {//if not dir
        echo '<BR/><BR/>';
        var_dump($filename);
        echo '<BR/>';
        $added[] = $folder.'/'.$filename;
        require_once($folder.'/'.$filename);
        var_dump($filename);
    }
}

Я получаю следующий вывод:

string(8) "init.php" 
string(8) "init.php" 

string(14) "dbContract.php" 
string(14) "dbContract.php" 

string(12) "requires.php" 
NULL

вместо:

string(8) "init.php" 
string(8) "init.php" 

string(14) "dbContract.php" 
string(14) "dbContract.php" 

string(12) "requires.php" 
string(12) "requires.php" 

Тем не менее, я получаю ожидаемый результат, когда я закомментирую строку:

require_once($folder.'/'.$filename);

1 ответ

Что-то в require.php меняло $filename благодаря @Mark

Редактировать Думаю, я понял:

function requireDir($folder, $subs, &$added){

    $contents = opendir($folder);

    while($filename = readdir($contents)){
        $wholename = $folder.'/'.$filename;

        if(is_dir($wholename)){
            if($filename != '.' && $filename != '..'){
                if($subs){
                    requireDir($wholename,$added);
                }
            }
        }else if(is_file($wholename)){
            $added[] = $wholename;
        }
    }
}
Другие вопросы по тегам