Newsgroup: it.comp.www.php
Titolo: Strano comportamento del php

Salve,
come in oggetto ho notato un comportamento ...
In un blocco di codice, se inserisco una riga che richiama una funzione 
(anche vuota) funziona come dovrebbe, se commento quella riga poi non va.
Ho messo il codice abbastanza minimale e funzionante a:
http://pastebin.com/vBrL6A8c
 
 
In pratica in questo codice:
 
//  writelog("-");
   $sub = getSub($row[0], $whichList, $buff);
 
con la riga commentata non viene chiamata la funzione getSub(), se tolgo 
il commento funziona. La writelog() è vuota, non fa assolutamente nulla.
 
Da cosa può dipendere?
 
Grazie

Ho letto un po' in fretta ma per prima cosa abiliterei TUTTI gli errori per vedere se magari sfugge qualcosa:
 
http://www.quellocheso.it/2011/12/02/come-abilitare-gli-errori-in-php/
 

 
http://www.quellocheso.it/2011/12/02/come-abilitare-gli-errori-in-php/
 
 
Scusa, non l'avevo specificato, uso l'ambiente wamp ed è già abilitato 
di default :-(
 
Notice: Undefined variable: sub in .... on line 64
Notice: Undefined variable: sub in .... on line 66

Ho provato il tuo codice e funziona senza problemi.
La funzione writelog() l'ho DEcommentata e ci ho messo dentro un echo 'log scritti<br />';
 
  function writelog($text) {
 
    echo 'log scritti<br />';
 
  }
 
mi stampa log scritti e procede con l'esecuzione... E' strano che a te dia problemi. Io però uso un ambiente LAMP, quindi configurazioni e versione di php potrebbero essere diverse


Il problema me lo da con la funzione commentata, se decommentata e 
quindi viene eseguita (anche se vuota) allora funziona tutto il resto.
 
Grazie per l'interessamento

Si scusa, ho provato anche con //writelog("-"); e funziona ugualmente.
$sub viene valorizzato e vale 3!

 $sub viene valorizzato e vale 3!
 
Grazie, allora dipende dal php in ambiente windows :-(
Si comporta allo stesso modo sia in locale col wamp che su aruba con 
host windows.
Intanto, in attesa di soluzioni (qualcuno può provarla in ambiente 
windows?), ci lascio il richiamo alla funzione vuota.
 
Grazie ancora

Prova a fare una cosa stupida, invece di commentare facendo // prova a fare /*writelog()*/

 Prova a fare una cosa stupida, invece di commentare facendo // prova a fare /*writelog()*/
 
non cambia nulla, se la riga è commentata (con // oppure /* */) la 
funzione getSub() non viene chiamata, ho provato a mettere una echo 
all'interno della getSub() e non ci arriva proprio.
Tra l'altro avevo messo la scrittura del log (non vuota) anche in altri 
punti, es. all'entrata della modifyFile(), succedeva che quella riga di 
log (quella prima della getSub(), l'unica che è rimasta nell'esempio) 
non veniva eseguita ma poi funzionava il resto.


ho provato a commentare
//  if(!$buff)
//    return
 
e adesso funge anche con la writelog() commentata :-(
 
Ahhhhh!!!
Come si fa il simbolo di chi sbatte la testa?
era la mancanza del ; dopo il return

Bhe non ci ho pensato... a me piace avere il codice ordinato e infatti quella parte l'ho modificata in
 
    if (!$buff) {
      return;
    }


Ognuno ha i suoi stili :-)
 
Io tendo a non mettere le graffe nel caso di un'unica istruzione ... 
(sono nel php per quasi-diletto, hobby e aiuto agli amici, ma il mio 
language è C/C++ e lì avrei risolto in un attimo :-( )
 
Comunque i test si dovrebbero fare senza toccare nulla ... poi, appurato 
il problema agire di conseguenza :-)
 
Grazie ancora del tempo dedicatomi
 
Saluti

Il problema è che dopo l'istruzione return bisogna chiudere con il punto e virgola  ' ; '.
 
Inoltre l'istruzione return in una funzione dovrebbe essere seguita da qualcosa. Se è una funzione non deve restituire un valore (tipo numero o stringa) è oppourtuno mettere un return true o false.
 
Ricevevi l'errore quando decommentavi   //  writelog("-"); perchè l'istruzione return non aveva il punto e virgola.
 
Qui sotto il codice corretto:
 
if(!$buff)
    return; 
----------------
se non metti il punto e virgola l'interpretericonosce tutta una istruzione cioè
 
return writelog("-");
 
oppure se commentavi //writelog("-");  risutava così:
 
return $sub = getSub($row[0], $whichList, $buff);
 
ed una assegnazione (l'uguale =) nella return no è possibile inserirla!
----------------------------------------------------------------
 
  // se si commenta questa riga la funzione seguente 'getSub()' non viene
  // chiamata e $sub resta indefinito. Se la si lascia attiva, anche se poi
  // non esegue nulla, viene chiamata la funzione e $sub viene valorizzato
//  writelog("-");
 
  $sub = getSub($row[0], $whichList, $buff);
  if(-1 == $sub)
    return;

 Da cosa può dipendere?
 
Dal modo in cui "writelog() è vuota" o da unprintable che magari hai 
inserito copiando e incollando da web.
 
Incolla un pezzo di codice autonomo che riproduca l'errore.