Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Kloaz
    Registrato dal
    Nov 2004
    Messaggi
    101

    Problema Espansione Variabili

    Salve a tutti, premetto che prima di scrivere ho cercato in tutti i modi di risolvere questo maledetto problema ma senza esiti positivi.
    Perciò dopo mille tentativi eccomi qui a chiedervi umilmente aiuto

    Il mio problema riguarda l'espansione delle variabili presenti in una stringa,nel momento in cui questa viene assegnata come valore ad una variabile, in particolare nel mio caso, per un template:

    Ok supponiamo di avere dei valori un db e tramite una chiamata ad una funzione vengono estratti e mostrati con un template modificabile dall'utente

    il template sta in una varibile cosi:

    Codice PHP:
    $template "
    <table>
      <tr>
       <td>
    $nome</td>
       <td>
    $cognome</td>
       <td>
    $età</td>
      </tr>
     </table>"
    ;

    funzione($template); 
    In questo momento essendo la stringa tra " " il php farà il parsing ed espanderà le variabili che incontra, ma in quel momento quelle variabili non avranno alcun valore e quindi il risultato non sarà quello voluto.

    Se invece provo a mettere la stringa tra ' ' l'espansione non verrà effettuata, che è cio che volgio io, ma all'interno della funzione che estrai i dati dal db, una istruzione come:

    Codice PHP:
    echo $template "
    Mi restituirà il $template così com'è senza espandere le variabili, (che verranno definite dalla funzione stessa una volta estratti i valori) cosa che non mi sta piu bene.
    Ho provato altri metodi di delimitazione di una stringa come HAREDOC ma non cambia nulla :/

    La soluzione piu facile sarebbe inserire il template al'interno della funzione, ma non credo che nessuno farebbe queste porcheria, l'utente dovrebbe editare il file delle funzioni per cambiare un template...

    Detto ciò... vi chiedo umilmente aiuto sembrava una cazzata e invece mi ha bloccato :/

    ps: starebbe a pennello, se esiste, perchè io non l'ho trovata, una funzione che data una variabile con un valore rappresentato da una stringa tra ' ' (con possibili variabili nn espanse)
    ne faccia il parsing per l'espansione trattandola come se fosse tra " "... questo risolverebbe subito il mio problema.

    grazie anticipatamente

  2. #2
    $template = "
    <table>
    <tr>
    <td>".$nome."</td>
    <td>."$cognome."</td>
    <td>."$età."</td>
    </tr>
    </table>";

  3. #3
    Utente di HTML.it L'avatar di Kloaz
    Registrato dal
    Nov 2004
    Messaggi
    101
    le espande anche cosi... non va.. se non sbaglio avevo anche tentato in questo modo....
    qualke ideaa??? please

  4. #4
    non riesco bene ad afferrare la situazione mi sa......


    quando assegni un valore alle variabili? nella funzione?
    quindi dovresti usare una variabile di variabile.....
    una volta le ho usate.....se trovo il codice te lo posto......
    cmq era una cosa di sto tipo

    $template = "
    <table>
    <tr>
    <td>$$nome</td>
    <td>$$cognome</td>
    <td>$$età</td>
    </tr>
    </table>";

    funzione($template);


    in questo modo all'interno della funzione avrai la strnga con all'interno ancora delle variabili e non la stringa $nome......se non ho capito male era questo il tuo obbiettivo vero?

    se così fosse leggi qui

    http://www.redangel.it/programmatori...imenti_var.asp

  5. #5
    Se vuoi dichiarare direttamente le variabili in quel modo l'unica soluzione che vedo così su due piedi è utilizzare eval così:

    Codice PHP:
    $template '
    $myTemplate="
     <table>
      <tr>
       <td>$nome</td>
       <td>$cognome</td>
       <td>$età</td>
      </tr>
     </table>";'
    ;


    function 
    fun($tpl){
        
    $nome='Andrea';
        
    $cognome='P.';
        
    $età='31';

        eval(
    $tpl);
        echo 
    $myTemplate;

    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  6. #6
    Utente di HTML.it L'avatar di Kloaz
    Registrato dal
    Nov 2004
    Messaggi
    101
    @ nmkbeppe
    Ho provato ad usare la variabile di variabile, ma purtroppo l'esito è negativo...
    Forse ho sbagliato ad usarle, ho provato sia cn il tuo metodo ma le espande comnunque e lascia una $ o anche con ${$nomevar} ma non va nemmeno... se sbaglio nella sintassi avvertitemi perchè sarebbe interessante potrele usare in questo conteso! Ti ringrazio comunque


    @ Anªkin
    Grazie mille, cone eval() aggiro il problema il problema!

    Genitilissimi tutti come al solito! grazie a tutti

  7. #7

    Re: Problema Espansione Variabili

    Originariamente inviato da Kloaz
    ps: starebbe a pennello, se esiste, perchè io non l'ho trovata, una funzione che data una variabile con un valore rappresentato da una stringa tra ' ' (con possibili variabili nn espanse)
    ne faccia il parsing per l'espansione trattandola come se fosse tra " "... questo risolverebbe subito il mio problema.
    Macchè eval(), la funzione che cerchi è semplicemente str_replace().

    Codice PHP:
    $template '....';

    $template str_replace('$cognome''di Nazareth'$template);
    $template str_replace('$nome''Jesus'$template);

    echo 
    $template

  8. #8
    Utente di HTML.it L'avatar di Kloaz
    Registrato dal
    Nov 2004
    Messaggi
    101
    conoscevo str_replace() ma cercavo un modo per evitare una specie di parsing manuale, pensa se avessi 10 variabili, dovrei fare 10 str_replace...
    con eval() è una sola istruzione

  9. #9
    Originariamente inviato da Kloaz
    conoscevo str_replace() ma cercavo un modo per evitare una specie di parsing manuale, pensa se avessi 10 variabili, dovrei fare 10 str_replace...
    con eval() è una sola istruzione
    Non è necessario fare più di una chiamata a str_replace(): il seguente codice sostituisce TUTTE le variabili definite.

    Codice PHP:
    $template '....';

    foreach(
    get_defined_vars() as $_name => $_value) {
        
    $template str_replace('$'.$_name$_value$template);

    Il problema di eval() è che è un comando significativamente lento: se il template che usi è grande o complesso oppure se lo richiami parecchie volte, str_replace() è molto più rapido. Per cose semplici, le due soluzioni si equivalgono (anche se personalmente ritengo str_replace() più "corretta").

  10. #10
    Originariamente inviato da ntd
    ...le due soluzioni si equivalgono...
    In realtà ci sono delle differenze anche sostanziali tra i due approcci: eval() è un parser mentre str_replace() è una sostituzione. Per esempio, avendo '$porongo' come template ed una variabile $poro = 123, eval() restituirà una stringa vuota (o andrà in errore) mentre str_replace() restituirà '123ngo'.

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.