Visualizzazione risultati 1 fino 6 di 6

Discussione: Funzione, in una classe, che stampa valore array associativa

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito Funzione, in una classe, che stampa valore array associativa

    Sto realizzando uno script per provare ad ottenere il valore di una variabile, contenente un'array associativa, presente in una classe.

    Questa è la classe:
    Codice PHP:
    class Testing
    {
    var
    $arr = null;

    function
    __construct()
    {
    $this->arr = array();

    $this->arr["indice1"] = "valore1";
    }

    function
    get($index)
    {
    return
    $this->arr[$index];
    }
    }
    L'array associativa mi viene creata correttamente, anche perché quando stampo la sua struttura all'interno del costruttore, tramite il print_r(), me la restituisce.

    Il problema è che, con la funzione get(), vorrei far stampare il valore all'indice passato tramite la funzione, ma non mi stampa nulla.

    Ovviamente dopo aver creato la classe ho inizializzato oggetto che la richiama e da li o richiamato la funzione get, dell'oggetto inizializzato, ma non mi stampa nulla, come mai?

    Premetto che è la prima volta che utilizzo le array in una classe, forse è questo il problema?
    Ultima modifica di sevenjeak : 17-09-2011 alle ore 20.24.29

    Sevenjeak
    Software developer and much more

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Da come hai strutturato la classe, questo è il procedimento per stampare il valore associato all'indice:
    Codice PHP:
    $t = new Testing();
    echo
    $t->get("indice1");
    Se pensavi di fare qualcosa come echo $t->indice1, allora devi usare il metodo "magico" __get().

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Il problema è proprio quello, io la classe e il metodo get lo richiamato, come scritto nel mio primo post e suggerito da te, ma non mi stampa niente, cmq.. non avevo proprio pensato ad usare il metodo __get(), ora lo provo e ti faccio sapere.

    EDIT:

    Scusa, infatti quel codice va benissimo, lo postato perché pensavo che l'errore nel mio codice era solamente li, invece no, tutto il mio codice cmq è questo:

    Codice PHP:
    <?php
    class Testing
    {
    var
    $arr = null;

    function
    __construct()
    {
    $new_arr = array();

    $this->arr = file("/membri/sevenjeak/testing/file");

    for (
    $i = 0; $i < count($this->arr); $i++)
    {
    $c_a = explode("=", trim($this->arr[$i]));
    $new_arr[$c_a[0]] = $c_a[1];
    }

    $this->arr = $new_arr;
    }

    function
    __get($index)
    {
    return
    $this->arr[$index];
    }
    }

    $test = new Testing();
    echo
    $test->primo;
    ?>
    In poche parole, $arr contiene ogni riga di un file, suddiviso in questo modo:

    Codice:
    primo = "val1"
    secondo = "val2"
    Fatto ciò questa variabile viene sostituita da un'array associativa, credo che si capisca dal codice.

    Bhe.. in realtà mi bastava fare una semplice array associativa in php, ma avevo pensato, in futuro che: se cambiavo il file mi cambiava, cmq fino al costruttore mi va tutto bene, la nuova array associativa mi viene creata correttamente.

    Il problema rimane il metodo __get() che non mi restituisce nulla, ho provato anche con il metodo get(), usato prima da me, ma non mi stampa ugualmente nulla.
    Ultima modifica di sevenjeak : 18-09-2011 alle ore 09.36.08

    Sevenjeak
    Software developer and much more

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Evidentemente ci sarà qualche problema relativo a $this->arr, hai controllato che i valori vengano correttamente assegnati?
    Posta il file /membri/sevenjeak/testing/file, per sicurezza.

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Il file come già scritto contiene due righe, e questo è il suo contenuto:

    Codice:
    primo = "val1"
    secondo = "val2"
    In effetti il file si trova nella stessa directory della classe, potrei richiamarlo tramite indirizzo relativo, ma il fatto è che la classe la devo includere il altre pagina, che non si trovano nella stessa directory.

    Provando a modificare il codice cosi:

    Codice PHP:
    <?php
    class Testing
    {
    var
    $arr = null;

    function
    __construct()
    {
    $new_arr = array();

    $this->arr = file("/membri/sevenjeak/testing/file");

    for (
    $i = 0; $i < count($this->arr); $i++)
    {
    $c_a = explode("=", trim($this->arr[$i]));
    $new_arr[$c_a[0]] = $c_a[1];
    }

    $this->arr = $new_arr;
    print_r($this->arr);
    }
    }

    new
    Testing();
    ?>
    Mi viene stampata correttamente l'array, cioè mi viene stampato questo:

    Codice:
    Array ( [primo ] => "val1" [secondo ] => "val2" )
    La cosa strana è che l'array mi viene stampata anche se la richiamo dall'esterno della classe.

    Forse è il metodo __get(), o è altro?

    EDIT:

    Ho risolto, non avevo notato che si creava uno spazio alla fine del nome dell'indice, a parte degli apici che non volevo mi stampasse, ma quello non fa nulla, cmq grazie per l'aiuto.
    Ultima modifica di sevenjeak : 18-09-2011 alle ore 12.09.16

    Sevenjeak
    Software developer and much more

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Codice PHP:
    <?php
    class Testing {
    private
    $arr = array();

    public function
    __construct() {
    $fh = fopen('file.txt', 'r');

    while(list(
    $n, $v) = fscanf($fh, '%s = "%[^"]')) {
    $this->arr[$n] = $v;
    }

    fclose($fh);
    }

    public function
    __get($n) {
    return
    $this->arr[$n];
    }
    }

    $t = new Testing();
    echo
    $t->primo; // val1
    ?>
    Così dovrebbe andare più che bene.
    Ultima modifica di javascripter : 18-09-2011 alle ore 19.51.09

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •