Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    Passare un secondo parametro ad un metodo chiamato

    Ciao a tutti,
    data una classe con questi 2 metodi:
    Codice PHP:
        protected function trasformaVar($html) { 
                    return 
    preg_replace_callback(
                    
    self::REGEXVAR, array($this'altroMetodo'),
                    
    $html
            
    );      
        }
        
        protected function 
    altroMetodo($valore) {
            
    $parola strtolower(str_replace("#"""$valore[0]));
            return 
    str_replace("var_"""$parola);
        } 
    Facendo:
    Codice PHP:
    $this->trasformaVar($dettagli); 
    In pratica passo una stringa al metodo trasformaVar(), per ogni ricorrenza viene chiamato il metodo altroMetodo() che non fa altro che 'trasformare' la ricorrenza trovata, ES: il testo #VAR_MIAVARIABILE# viene trasformato in 'miavariabile', e funziona correttamente.

    A parte questo, la domanda è la seguente:

    Come faccio a passare un secondo paramentro in modo che possa utilizzarlo all'interno del metodo altroMetodo()?
    Vorrei poter scrivere:
    Codice PHP:
    $this->trasformaVar($dettagli,$altroParametro); 
    e che $altroParametro fosse disponibile nel metodo altroMetodo():
    Codice PHP:
        protected function altroMetodo($valore,$altroParametro) {
           ...
    codice
        

    Non riesco a passarlo, come posso fare?

    Grazie,
    Roberto

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Devi cambiare la dichiarazione della funzione aggiungendo il secondo parametro

    protected function trasformaVar($html, $altroParametro) { ... }

    se prevedi che a volte tale parametro possa essere mancante, devi dargli un valore di default (vuoto)

    protected function trasformaVar($html, $altroParametro='') { ... }

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ciao,

    così passo '$altroParametro' al metodo 'trasformaVar'
    Ma adesso che ho il riferimento di $altroParametro all'interno del metodo trasformaVar, come faccio a passarlo al metodo 'altroMetodo' mediante la call:
    Codice PHP:
    preg_replace_callback(
                    
    self::REGEXVAR, array($this'altroMetodo'),
                    
    $html
    ); 


  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Per esempio puoi mettere le 2 variabili in un array e passi quello alla funzione di callback

    $params = array($html, $altroParametro)

    e passi $param invece di $html alla chiamata.

    Nella funzione di callback tiri fuori dall'array le 2 variabili che contiene.

  5. #5
    Non puoi passare parametri alla callback di preg_replace_callback().

    La soluzione piu' semplice e' usare una anonymous function invece di creare una funzione separata per la callback cosi':

    Codice PHP:
    return preg_replace_callback(self::REGEXVAR, function($match) use ($altroParametro) {
        
    // codice che usa i $match della regexp e $altroparametro
    }, $html); 

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Per esempio puoi mettere le 2 variabili in un array e passi quello alla funzione di callback

    $params = array($html, $altroParametro)

    e passi $param invece di $html alla chiamata.

    Nella funzione di callback tiri fuori dall'array le 2 variabili che contiene.
    No la callback non riceve $html, riceve i pezzi matchati dalla regexp.

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da k.b Visualizza il messaggio
    No la callback non riceve $html, riceve i pezzi matchati dalla regexp.
    Capito, non ho mai usato questa funzione e sono andato ad intuito... che ha miseramente fallito

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Non puoi passare parametri alla callback di preg_replace_callback().

    La soluzione piu' semplice e' usare una anonymous function invece di creare una funzione separata per la callback cosi':

    Codice PHP:
    return preg_replace_callback(self::REGEXVAR, function($match) use ($altroParametro) {
        
    // codice che usa i $match della regexp e $altroparametro
    }, $html); 
    perfetto, non so come ringraziarti, evevo già guardato la possibilità di una funzione anonima ma rimaneva sempre il problema di non poterle passare un altro parametro ma:
    function($match) use ($altroParametro)
    ...mi ha aperto le porte ;-)
    Stavo cercando una soluzione con create_function, che funzionava, ma il codice dovevo passarlo come stringa e non mi piaceva per niente.
    La tua soluzione è migliore!

    Grazie,
    Roberto

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Capito, non ho mai usato questa funzione e sono andato ad intuito... che ha miseramente fallito
    Ok, a te va il premio "buona volontà"!

    Grazie dell'interessamento !

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.