Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174

    Argomenti funzioni inizializzati

    Salve a tutti, ho un problemino con i parametri passati ad una funzione che chiamo ricorsivamente. Quello che fa la funzione è elencare i file contenuti in una directory. Posto il codice.
    codice:
    <?php
    
    function readDirRec($target = UPLOAD_DIR, $level = 0) {
        $handle = opendir($target);
        
        echo 'entro in ' . $target . '
    ';
        while ($file = readdir($handle)) {
            if ($file != '..' && $file != '.') {
                $resource = $target . '/' . $file;
                if (is_dir($resource)) {
                    echo '[img]img/icons/16/directory.png[/img]';
                    echo $file . '
    ';
                    readDirRec($resource, $level++);
                } else {
                    for ($i = 0; $i < $level; $i++) {
                        echo '[img]img/icons/16/empty.png[/img]';
                    }
                    echo '[img]img/icons/16/file.png[/img]';
                    echo '' . $file . ' (' . $level . ')[' . is_dir($resource) . '] 
    ';
                }
                
            }
        }
        echo 'esco da ' . $target . '
    ';
    }
    
    ?>
    UPLOAD_DIR è una stringa che contiene il path relativo alla directory da listare e l'invocazione la eseguo non passando alcun parametro.
    Quello che ottengo è il risultato nell'immagine allegata e non capisco perchè al ritorno della chiamata ricorsiva $level mi risulta incrementata.
    Mi sapreste dare una dritta per capire dove sbaglio?
    Grazie infinite

    Dal comportamento sembrerebbe che $level sia statica e viene incrementata una volta quando entra in file e una volta in images...
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    OK, ho risolto ma non capisco il perchè adesso funzioni.
    Quando invoco ricorsivamente la funzione anzicheè $level++ ho messo $level + 1
    Ma non è la stessa cosa

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Nessuno sa delucidarmi?!?!

  4. #4
    Alla prima chiamata probabilmente hai impostato il $level come stringa o null e quindi non riusciva ad aumentarne
    il valore.
    con il +1 lo trasforma direttamente in (int)

    Credo sia questo ma non hai messo l'istruzione che chiama la prima volta il metodo
    Vi aspetto sul mio sito
    creato per tutti coloro che necessitano di aiuto, scripts ecc.
    http://www.dbpersister.com
    http://principeorazio.wordpress.com/

  5. #5
    Queste sono le piccole sottigliezze della programmazione In pratica per funzionare avresti dovuto fare ++$level e NON $level++ in quanto la prima istruzione PRIMA incrementa il valore e POI lo utilizza, invece il secondo formato PRIMA utilizza il valore e POI lo incrementa.
    Nel caso specifico (chiamata ricorsiva) in realtà veniva passato alla funzione sempre lo stesso valore!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    @Princex
    La prima volta che invoco il metodo lo faccio invocando la funzione non passando alcun parametro ed in caso il motore l'avesse interpretata come stringa sarebbe risultata una stringa nulla equivalente a zero

    @satifal
    Avevo provato entrambi i metodi, operatore di incremento post e prefisso, ma il malfunzionamento si verificava comunque.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.