Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di P4n1c
    Registrato dal
    Feb 2008
    Messaggi
    116

    __set/__get problema teorico.

    Ho trovato questo script sulla rete e...
    Codice PHP:
    <?php
     
    class int {
        var 
    $int;
        var 
    $var;
     
        function 
    __construct()
        {
            echo 
    "Int::__construct()\n";
        }
     
        function 
    __get($var)
        {
            echo 
    "restituisco il valore della variabile $var: ".$this->var[$var]."\n";
            return 
    $this->var[$var];
        }
     
        function 
    __set($var,$val)
        {
            echo 
    "setto il valore della variabile $var$val\n";
            
    $this->var[$var]=$val;
        }
    }
     
    $var = new int;
    $var->5;
    echo 
    "i = ".$var->i."\n";
    ?>
     
    --OUTPUT--
    Int::__construct()
    setto il valore della variabile i: 5
    restituisco il valore della variabile i: 5
    i = 5
    Qualcuno sarebbe così gentile da spiegarmi come funzioni ciò :master:
    Cioè non capendo il funzionamento secondo me non sta in cielo ne in terra :/

    Giustamente con __construct() viene richiamata la prima riga :
    - Int::__construct()

    Successivamente viene richiamata __set e non __get... perchè ? è la proprieta __set che fa in modo che venga richiamata per prima anche se si trova per ultima ?

    Oppure viene richiamata grazie alla riga :
    $var->i = 5;
    ( cosi viene spiegato nella guida )

    Se fosse richiamata dalla riga $var->i = 5; mi spiegate come è possibile ciò ?
    Ora ragiondoci un pò ho fatto questa supposizione ( ma credo sia sbagliata ):
    Dato che la funzione __set ha due valori ( variabile e valore ) richiamando la classe e assegnando alla variabile $var il valore di 5, la variabile è per sintassi il primo attributo della funzione e il valore il secondo attributo...

    Poi mi chiedo anche da dove spunti quella variabile "i" :/ Son abbastanza confuso...

    E infine com'è possibile che tramite :
    echo "i = ".$var->i."\n";
    si richiami __get ? Cioè secondo me l'unica possibilità è che per regola __set venga richiamata per prima e __get dopo.

    Ultima curiosità... è casuale che la classe sia inizializzata con la variabile $var ? O c'è una relazione con la variabile $var che sta all'interno della classe ?

  2. #2
    direi che alcune delle domande che hai fatto danno da pensare che dovresti studiare MOLTO gli argomenti che girano attorno alla programmazione ad oggetti

    l'ordine delle funzioni/metodi non c'entra assolutamente, ma proprio assolutamente, nulla!

    http://www.php.net/manual/en/languag...verloading.php

  3. #3
    Utente di HTML.it L'avatar di P4n1c
    Registrato dal
    Feb 2008
    Messaggi
    116
    eh ho capito che il mondo parla inglese ma io sono un alieno VVoVe:
    Nada de italiano perpiasere ?

  4. #4
    non esiste in italiano quella pagina

  5. #5
    codice deprecato e ricco di notices ... classe senza senso, ma per didattica può anche andare, purchè sia scritta bene
    codice:
    class int extends stdClass {
        public function __construct(){
            echo "creo una nuova istanza, perchè Int::__construct() è un'altra cosa\n";
        }
        public function __get($key){
            return $this->$key;
        }
        public function __set($key, $value){
            return $this->$key = $value;
        }
    }
    le variabili con var sono vecchie, in questo caso una è inutilizzata, la int, l'altra non è dichiarata come array, ergo notice ... ma a prescindere, in questo caso non servono variabili private, data la natura della classe che non controlla niente, ma assegna e basta

    [edit]
    ascolta daniele, ed impara l'inglese, che la programmazione è inglese, imo (per l'appunto)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    [OT]estendere la stdClass non ha senso [/OT]

  7. #7
    Originariamente inviato da daniele_dll
    [OT]estendere la stdClass non ha senso [/OT]
    dai, sentiamo perchè

    l'ho scritta apposta primo perchè quella classe fa esattamente quello che fa una stdClass, secondo perchè per le altre librerie l'ultimo check è sempre fatto sulla stdClass, ed essendo analoga non vedo perchè non estenderla, dato che stdClass non è la classe di partenza ...


    esempio
    codice:
    $boh = new stdClass;
    $boh->i = 5;
    echo $boh->i;
    uguale
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di P4n1c
    Registrato dal
    Feb 2008
    Messaggi
    116
    Originariamente inviato da andr3a
    [edit]
    ascolta daniele, ed impara l'inglese, che la programmazione è inglese, imo (per l'appunto)
    Avevo intenzione di farlo appena conclusa la scuola, ma non credo che lo apprendò in 20 minuti, quindi per il momento, se fosse possibile, mi serve una pagina in italiano ( p.s. sto gia cercando su google ma al momento non trovo niente )

    edit : forse ho trovato

  9. #9
    [ot]si estende una classe che serve, non giusto per estenderla ... estendi una classe perché ti implementa delle funzioni di base, perché hai una gerarchia su cui fai dei controlli e cosi via ... non giusto per estenderla [ot]

  10. #10
    Originariamente inviato da P4n1c
    Avevo intenzione di farlo appena conclusa la scuola, ma non credo che lo apprendò in 20 minuti, quindi per il momento, se fosse possibile, mi serve una pagina in italiano ( p.s. sto gia cercando su google ma al momento non trovo niente )
    per php 5 lascia perdere il 90% delle guide in italiano ... mi sembra il sito di filippo.tosi abbia qualcosa in italiano e qualche argomento lo tratta bene ( dico qualche perchè non li ho visti tutti ) ... ma in generale, ti consiglio di imparare l'inglese quanto prima se ti piace programmare, non come hobbista
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.