Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Metodo magico __toString

    Domanda secca, il metodo magico __toString() può tornare un array?

    Codice PHP:
    class {
      
    $foo = array();

      function 
    __construct() {
        for (
    $i 0$i <= 10$i++) $this->foo[$i] = (string)$i;
      }

      function 
    __toString() {
      return 
    $this->foo;
      }
    }

    $baz = new A();
    foreach (
    $baz as $b) echo $b
    Tanto per fare al volo, la classe di cui qui sopra può funzionare? A me non sta restituendo nulla, blocca l'esecuzione dello script ma non da neppure errore.
    Qualcuno mi sa rispondere cortesemente?

  2. #2
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Prima cosa, l'esempio mi da immediatamente l'errore
    codice:
    PHP Parse error: syntax error, unexpected '$foo'
    perché non è stata definita la visibilità di $foo.

    Comunque, anche cambiarlo non darà il risultato desiderato perché l'echo nel foreach non chiama toString() della classe ma itererà solo gli attributi della classe, quindi in quel caso solo $foo.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  3. #3
    è come provare a stampare a video un array

    php non lo consente
    semplicità ... al sol nominarla sembra svanire

  4. #4
    Utente di HTML.it L'avatar di Electro
    Registrato dal
    Dec 2003
    Messaggi
    565
    Potresti aggirare il problema serializzandolo e restituendolo come stringa, e poi usando unserialize per ricomporre l'array
    Nulla

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    @neroux
    Vero ma quell'esempio l'ho scritto al volo senza pensarci troppo e a memoria.
    Quindi fa conto che ci fosse public davanti alla dichiarazione della variabile.
    Per quanto riguarda il resto della tua risposta, dal manuale online ...
    Codice PHP:
    // Declare a simple class
    class TestClass
    {
        public 
    $foo;

        public function 
    __construct($foo)
        {
            
    $this->foo $foo;
        }

        public function 
    __toString()
        {
            return 
    $this->foo;
        }
    }

    $class = new TestClass('Hello');
    echo 
    $class
    Ovvero, essendo un metodo magico, la prima volta (il mio esempio) chiamando la classe, l'array $foo viene riempito di valori da 0 a 10 che poi dovrebbero essere resi visibili nel ciclo foreach.
    Come vedi dall'esempio qui sopra si richiama l'oggetto che a sua volta invocherà l'oggetto magico dando il risultato, o meglio dovrebbe darlo dichiarazioni public a parte che mi sono dimenticato di inserire qui sul forum, ma non nell'esempio a casa.

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Originariamente inviato da Electro
    Potresti aggirare il problema serializzandolo e restituendolo come stringa, e poi usando unserialize per ricomporre l'array
    Può essere un'idea ma mi pare un po' farraginoso, speravo di invocare il metodo magico per semplificarmi la vita

  7. #7
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Postare qualcosa al volo senza controllarlo per errori non è mai una buona idea

    Puoi postare il tuo codice che non va?

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  8. #8
    Utente di HTML.it L'avatar di Electro
    Registrato dal
    Dec 2003
    Messaggi
    565
    Originariamente inviato da Marcolino's
    Può essere un'idea ma mi pare un po' farraginoso, speravo di invocare il metodo magico per semplificarmi la vita
    si tratta di un passaggio in più, "echo unserialize($object)['value'];" (con PHP 5.4 questa forma dovrebbe funzionare, e magari potresti rinominare unserialize creando una funzione con un nome più breve).

    Purtroppo ogni tanto serve qualche compromesso
    Nulla

  9. #9
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Originariamente inviato da neroux
    Postare qualcosa al volo senza controllarlo per errori non è mai una buona idea

    Puoi postare il tuo codice che non va?
    Vero ma come dice lo stesso manuale del PHP non dichiarare la visibilità di un metodo equivale a dichiararlo publico.
    Method Visibility

    Class methods may be defined as public, private, or protected. Methods declared without any explicit visibility keyword are defined as public.
    Inserire qui il coice dell'intera classe è comunque complicato diciamo che a me interessava solo la questione stringa <--> array relativa al metodo magico.
    Se la risolvo bene, se no serializzo/deserializzo come dice @Electro.

  10. #10
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Originariamente inviato da Marcolino's
    Vero ma come dice lo stesso manuale del PHP non dichiarare la visibilità di un metodo equivale a dichiararlo publico.
    Sì, di un metodo, qui stiamo parlando di un attributo

    Originariamente inviato da Marcolino's
    Inserire qui il coice dell'intera classe è comunque complicato diciamo che a me interessava solo la questione stringa <--> array relativa al metodo magico.
    Se la risolvo bene, se no serializzo/deserializzo come dice @Electro.
    Il problema è che il tuo codice è diverso dal secondo esempio e quindi non si sa bene cosa intendi fare esattamente.

    Comunque non si può stampare un array in quel modo. Dovresti iterarlo e stampare ogni valore secondo le tue esigenze.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

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 © 2026 vBulletin Solutions, Inc. All rights reserved.