Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 59
  1. #1

    [PILLOLA] Programmare ad oggetti in PHP4

    La programmazione ad oggetti on PHP

    Programmazione ad oggetti o programmazione strutturale?
    La risposta è semplice: programmazione ad oggetti...il problema è che la programmazione ad oggetti (OOP d'ora in avanti) non è supportata in modo molto "convincente" dalla versione attuale di PHP, e soprattutto sembra essere una rgomento ostico per molti. La pillola che mi stò accingendo a scrivere, non pretende di essere la guida più esausiva del mondo sull'argomento dell'OOP, ma comprenderà una spiegazione teorica (nulla di difficile), ed un piccolo esempio pratico per capire la sintassi da utilizzare in PHP nella creazione di una classe. Premetto che quanto scritto servirà solo fino alla release ufficiale di PHP5, che comprenderà un supporto molto più completo all'OOP e delle piccole variazioni nella sintassi.


    Cominciamo con la teoria:

    Per capire cosa sia la OOP e come utilizzarla nei nosti script (che possono anche essere definiti programmi, in caso qualcuno decida di sviluppare in PHP-GTK), è fondamentale comprendere i seguenti concetti:
    • CLASSE: cominciamo con il concetto fondamentale: cos'è una classe?? Una classe altro non è che un modello astratto per diversi oggetti che hanno caratteristiche simili, ed incorpora le caratteristiche di una famiglia particolare di oggetti. Il tutto è molto stringato (di fatti si tratta solamente di una pillola), ma capirete molto meglio seguendo l'esempio.
    • ISTANZA/OGGETTO: istanza ed oggetto sono sinonomi: mentre una classe è la rappresentazione generale dell'oggetto, un'istanza ne è la rappresentazione effettiva, concreta.
    • EREDITARIETA': l'ereditarietà è uno dei concetti più importanti legati alla programmazione ad oggetti, ed ha un effetto immediato sulla struttura e sulla stesura delle applicazioni. è un meccanismo molto potente, che permettedi specificare, nella definizione di una classe, solo le differenze rispetto ad un classe già esistente: l'ereditarietà da accesso alle informazioni relative a quest'ultima. L'ereditarietà, solitamente, ordina in una rigita ma efficente gerarchia le classi. Chiameremo superclasse la classe padre dalla quale una sottoclasse erediterà metodi e proprietà.
    • VARIABILE DI ISTANZA e VARIABILI DI CLASSE: la differenza è minima ma importante: le variabili di classe definiscono le proprietà statiche ed inalterabili (questo non è vero per PHP, purtroppo) di un classe, mentre le variabili di istanza servono a definire le proprietà particolari di ogni oggetto (solitamente è compito del costruttore la loro inizializzazione).
    • METODO: un metodo è una funzioe che rappresenta una "capacità" di una classe e quindi delle sue istanze e delle istanze delle sue eventuali sottoclassi. Nulla di più. Esitono metodi particolari che descriveremo in seguito.
    • COSTRUTTORE/DISTRUTTORE: un costruttore è una funzione che viene chiamata durante la creazione di un'istanza da un classe, e, normalmente, serve a definirne lo stato. Un costruttore non è obbligatorio. PHP non ha, invece, distruttori, funzioni chiamate quando un oggetto viene distrutto, quando cioè viene effettivamente eliminato dalla memoria, solitamente quando non vi sono più riferimenti.

    Appresi questi concetti (o cestinati, fa lo stesso, ma non sarete mai programmatori seri senza sapere un bel po di teoria), possiamo passare all'analisi di una classe (inutile). Scrivo di seguito il listato completo, passerò successivamente a spiegarvi il concetto che sta alla base di questa classe ed il modo in cui utilizzarla:

    Codice PHP:
    class essereVivente{
      var 
    $specie;
      var 
    $ambiente;
      
    //...ne avrei potute aggiungere a migliaia...
      
      
    function essereVivente($specie,$ambiente){
        
    $this->specie $specie;
        
    $this->ambiente $ambiente;
      }

      function 
    muori(){
        echo 
    "se continueranno a morire esseri della mia specie (".$this->specie.") ci estingueremo\n";
      }

      function 
    doveVivo(){
        echo 
    "vivo in".$this->ambiente;
      }  
      
    //anche di metodi ne potrei aggiungere a migliaia...
    }

    class 
    animale extends essereVivente{

      var 
    $peso;
      var 
    $altezza;
      var 
    $gasRespirato "ossigeno";
      var 
    $arti;

      function 
    animale($specie,$ambiente,$peso,$altezza,$arti){
        
    $this->essereVivente($specie,$ambiente);
        
    $this->specie $specie;
        
    $this->peso $peso;
        
    $this->altezza $altezza;
        
    $this->arti $arti;
        echo 
    "Sono nato!!";
      }

      function 
    respira(){
        echo 
    "Sono un essere vivente, e stò respirando ".$this->gasRespirato;
      }
      
      function 
    salta($spazio){
        if(
    $this->altezza $spazio){
          echo 
    "Ho saltato ".$spazio." metri";
        }else{
          echo 
    "Al massimo posso saltare ".($this->altezza*5)." metri!";
        }
      }
    }

    class 
    essereUmano extends animale{

      var 
    $lingua;
      var 
    $sport;
      var 
    $nome;
      var 
    $eta;
      var 
    $sesso;
      
      function 
    essereUmano($nome,$sesso,$ambiente,$peso,$altezza,$eta,$lingua,$sport){
       
    $this->animale("Essere umano",$ambiente,$peso,$altezza,4);
       
    $this->lingua $lingua;
       
    $this->eta $eta;
       
    $this->sport $sport;
       
    $this->nome $nome;
       
    $this->sesso $sesso;
      }
      
      function 
    guida(){
        if(
    $this->eta 18){
           echo 
    "Non sono neanche maggiorenne, come posso guidare??";
        }else{
           echo 
    "Segno della croce e via!!Anche se non ho ancora preso la patente!";
        }
      }
      
      function 
    parla($frase){
        echo 
    $frase."\nSe vuoi te la dirò anche in ".$this->lingua;
      }
    }

    class 
    donna extends essereUmano{
       
       function 
    donna($nome,$ambiente,$altezza,$lingua){
          
    $this->essereUmano($nome,"femmina",$ambiente,"fruscello",$altezza,"una giovincella",$lingua,"nessuno");
       }
       
       function 
    guida(){
         echo 
    "3 morti e 15 feriti...";
       }
       
       function 
    pensa(){
         echo 
    "Scusa?Che hai detto??";
       }

       function 
    maQuantiAnniHai(){
         echo 
    $this->eta;
       }
    }

    class 
    uomo extends essereUmano{

       function 
    uomo($nome,$ambiente,$peso,$altezza,$eta,$lingua,$sport){
          
    $this->essereUmano($nome,"maschio",$ambiente,$peso,$altezza,$eta,$lingua,$sport);
       }

       function 
    pensa(){
         echo 
    "Sono troppo un genio, che penso a fare??";
       }
       
       function 
    gioca(){
         echo 
    "Stò già giocando a ".$this->sport." !";
       }

    bene...copiate queste classi completamente inutili su un documento PHP e visualizzatelo: la pagina dovrebbe essere completamente vuota. Questo perchè avete creato la CLASSE, nessuna ISTANZA, quindi tutto ciò che è presente sul documento è solamente il modello astratto (ricordate??), nulla di "reale" ed attivo. Le classi che ho creato sopra, rappresentano molto astrattamente quello che potrebbe essere un albero delle specie viventi. Abbiamo la classe essereVivente che definisce alcuni tratti comuni tipici delle varie specie, siano queste animali, vegetali o cos'altro. Una seconda classe animale(che eredita dalla prima) che definisce proprietà tipiche di un solo ramo degli esseri viventi: quello appunto degli animali. La classe essereUmano eredita da animale, ed anchessa definisce delle caratteristiche generali per un essere umano, tipiche di entrambi i sessi. le ultime due, donna e uomo, definiscono in modo astratto l'essere umano uomo e l'essere umano donna, e per questo motivo ereditano dalla classe essereUmano. Il tutto può essere riassunto nello schema seguente (che vi consiglio di preparare ogni volta che decidete di sviluppare un complesso sistema di classi):

    codice:
    essereVivente
         |
         |____ animale
                  |
                  |____ essereUmano
                             |
                             |____ donna
                             |
                             |____ uomo
    lo schema precedente definisce la struttura del nostro pseudoprogramma. Guardando velocemente questo grafico, possiamo capire che, in caso volessimo utilizzare la classe donna nelle nostre applicazioni, questa avrà TUTTI i metodi e le proprietà delle classi essereVivente,animale e essereUmano (le sue superclassi,ricordate??), ma nulla in comune con la classe uomo. Passiamo ora all'analisi line-by-line del codice

    Riga 1:
    Codice PHP:
    class essereVivente
    questa è la sintassi minima per la creazione di una classe. Di seguito trovate un piccolo schemino che rappresenta la sintassi corretta (tra parentesi quadre la parte opzionale):
    codice:
    class nome_classe [extends nome_superclasse]{ 
    }
    Come potete notare, non è obbligatorio che una classe abbia una superclasse, ma in caso succeda, a superclasse può essere una sola. Infatti PHP non supporta l'ereditarietà multipla (punto di forza di C++ e Python), che permette di ereditare metodi e proprietà da più genitori, come il più blasonato Java. Notiamo che nome_classe segue le stesse regole per la definizione di un nome di una funzione o di una variabile (qundi niente numerini all'inizio ecc...), e non può assumere il nome di una funzione già definita.

    Righe 2-3:
    Codice PHP:
      var $specie;
      var 
    $ambiente
    Qui, prima di definire il costruttore o ogni altra funzione, definiamo le variabili di classe o di istanza. Notate che, differentemente da altri linguaggi di programmazione, PHP permrette di creare solo variabili pubbliche, a cui vi si può accedere in lettuara ed in scrittura d qualsiasi parte dello script. La sintassi corretta per la definizione di una variabile è la seguente:

    codice:
    var nome_variabile [= valore];
    Come potete vedere, è obbligatorio porre la "parolina" var PRIMA di scrivere il nome della vostra variabile, pena un errore di debug. Il valore non è obbligatorio, questo perchè, in questo modo, è possibile differenziare (virtualmente,non praticamente per ora) le variabili di istanza (quelle senza valore, che saranno inizializzate in seguito) e le variabili di classe (quelle con un valore iniziale che, in teoria, non dovrebbe essere variato). Notiamo che le variabili possono assumere (in caso siano di classe, quindi inizializzate direttamente nella definizione) solo i seguenti tipi di valore:
    numerico (1, 100, 10.001, ecc...)
    stringa ("1", "ciao", "casc casmcsa clacsòlmcòasc", ecc...)
    array (array(), array("chiave" => valore,...), array(valore,valore,...), ecc...)
    costanti (PHP_OS, ecc...)
    quindi non possiamo fare riferimento a variabili globali, non possiamo scrivere espressioni del tipo,
    Codice PHP:
    //ERRATO!
    var $figa_o_no = (($GLOBALS["misura_seno"]$_POST["misura_culo"]-$_SERVER["misura_fianchi"])/== $_SERVER["misura_fianchi"]);
    //ERRATO! 
    non possiamo neppure utilizzare funzioni (ne user defined, ne globali) e, cosa da tenere molto inc onsiderazione, non possiamo istanziare nuove classi (per chi si sta chiedendo: "come si istanzia una classe??" veda più avanti).

    Riga 6:
    Codice PHP:
    function essereVivente($specie,$ambiente){ 
    Come potete notare, questa non è altro che la definizione di una normalissima funzione. Infatti, se ci troviamo all'interno della definizione di una classe, tutte le funzioni definite (che seguono le normali regole di definizione di una funzione in PHP) diventano automaticamente metodi della classe. E' inutile che vi scriva la sintassi corretta di una funzione, ma in questa riga c'è da tenere conto ancora di una cosa: come potete vedere, il nome della funzione è lo stesso del nome della classe che lo contiene. Non è un errore,ma bensi è il modo in cui di definisce un costruttore in PHP. Ricordo, per i neofiti provenienti dall'oscuro mondo Java, che in PHP NON è attualemente possibile eseguire l'overloading dei metodi. Ricordate quindi: l'unica cosa che differenzia un metodo da un costruttore, è che quest'ultimo DEVE avere il nome della classe nel quale è definito. Come potete notare, il costruttore non restituisce nulla, e può essere anche ommesso.
    eXtending-Php.net coming soon ...

  2. #2
    Riga 7-8:
    Codice PHP:
        $this->specie $specie;
        
    $this->ambiente $ambiente
    In queste 2 righe di codice è racchiunsa un'informazione molto importante: come potete notare, abbiamo fatto riferimento alle varibili $specie ed $ambiente (che erano variabili di istanza, ma anche se fossero state varibili di classe non avrebbe fatto differenza) in modo un po particolare:
    codice:
    $this->nome_var_senza_simbolo_dollaro
    D'ora in poi, infilatevi bene in testa che l'unico modo per riferirsi ad una variabile di classe o di istanza , e quindi l'unico modo di modificare un oggetto, è quello di anteporre al nome della variabile senza $ il prefisso $this->. Il significato di -> ve lo spiegherò più avanti. per ora vi basti sapere questo. oltretutto è fondamentale sapere che $this-> va anteposto anche a nomi di funzioni definite all'interno della classe stessa, in caso volessimo utilizzarle da un'altra parte, sempre nella stessa classe. L'uso di $this si limita a dire a PHP di riferirsi alla variabile di QUESTA (this) classe, non ad un'altra variabile presente nel blocco di codice. Quindi scrivere:
    Codice PHP:
    $this->variabile $variabile
    è perfettamente lecito. Infatti questo comando assegna il valore della variabile locale $variabile, alla variabile di classe o di istanza omonima.

    Senza proseguire riga per riga vi spiego altri punti fondamentali:

    Riga 21-35:
    Codice PHP:
    class animale extends essereVivente{

      var 
    $peso;
      var 
    $altezza;
      var 
    $gasRespirato "ossigeno";
      var 
    $arti;

      function 
    animale($specie,$ambiente,$peso,$altezza,$arti){
        
    $this->essereVivente($specie,$ambiente);
        
    $this->specie $specie;
        
    $this->peso $peso;
        
    $this->altezza $altezza;
        
    $this->arti $arti;
        echo 
    "Sono nato!!";
      } 
    Questo è un'esempio di classe estesa. A parte farvi vedere la sintassi, mi interessava farvi notare che, all'interno del costruttore della sottoclasse, abbiamo una chiamata al costruttore della superclasse. Questo è obbligatorio se nella sottoclasse abbiamo un costruttore, altrimenti l'ereditarietà non avrebbe effetto alcuno sulla sottoclasse. In caso non si abbia un costruttore, consiglio comunque caldamente di inserirlo solo per richiamare il costruttore della superclasse: infatti,nel primo caso (no costruttore), un'istanza della classe figlio sarebbe considerata un'istanza della classe padre, mentre nel secondo caso (si costruttori) otterresti due ID differenti.


    Riga 87-89:
    Codice PHP:
       function guida(){
         echo 
    "3 morti e 15 feriti...";
       } 
    Da queste righe dovreste notare una cosa: guida() è una funzione definita ANCHE nella superclasse della classe in cui si trova (la classe donna). Qui vi è una seconda definizione. Darà un errore??Fate una prova, e poi uardate il risultato. Non da errore: difatti l'operazione di definire metodi con nome identico a metodi della superclasse è chiamato ridefinizione, e permette di cambiare il comportamento di un metodo in base all'oggetto dal quale è stato creato. In questo caso una chiamata a guida() stamperebbe "3 morti e 15 feriti", e non "Segno della croce e via!!Anche se non ho ancora preso la patente!", come era stato definito nella superclasse essereUmano.

    Siccome la teoria è stata lunga, due accenni alla pratica:

    Di seguito, vi spiegherò come ristanziare una classe e come lavorarci. Il tutto è molto semplice, anche se andrebbero fatte delle precisazione sulla creazione di istanze per riferimento che m risparmierò perchè vanno fuori dal contesto della pillola . Una classe si istanzia nel seguente modo:
    codice:
    nome_variabile = new nome_classe[(arg1,...,argN)];
    nel caso pratico:
    Codice PHP:
    $miaNonna = new donna("Isabella","campagna","1.60","dialetto milanese"); 
    Come vedete non c'è nulla di complesso a parte una cosa che potrebbe risultare poco chiara: nel caso in cui la classe da istanziare NON abbia costruttore, le parentesi tonde possono essere inserite vuote (senza parametri attuali), o possono essere ommesse. Questione di stile. Io consiglio la seconda.
    Per fare riferimento alla variabili di una classe o ai suoi metodi, useremmo la seguente struttura:
    codice:
    nome_istanza->nome_variabile;
    nome_istanza->nome_metodo([arg1,...,argN]);
    Come potete notare, la chiamata ad un metodo necessita dell'utilizzo delle parentesi tonde, che non possono essere ommesse. Nel nosto caso particolare avremmo:
    Codice PHP:
    //facciamo guidare mia nonna!!
    $miaNonna->guida();
    //Stampiamo il suo peso:
    echo $miaNonna->peso
    Il tutto non mi sembra affatto complesso...dateci un'occhiata e capirete subito come utilizzare il simbolo ->. Una precisazione: in caso una variabile di classe (o istanza) contenga un'istanza di un'altro oggetto, per riferirci alle varibili o metodi di quest'ultimo faremo:
    codice:
    istanza_1->var_contente_istanza2->metodo_o_var_di_istanza2
    Naturalmente il tutto può essere nidificato, ed utilizzato anche all'interno della classe usando $this al posto del nome della prima istanza.
    Se si vole fare riferimento ad un metodo di una classe che non è ancora stata istanziata, seguite la sintassi seguente:
    codice:
    nome_classe::nome_metodo([arg1, ... ,argN])
    Un esempio con la nostra classe non ha molto senso, comunque dovreste aver capito correttamente come funziona il tutto. Chiarimenti, se neccessari, li aggiungerò in seguito. NON potete accedere alle variabili usando il costrutto con "::".
    Semi-concludo spiegandovi l'uso di parent:
    codice:
    parent::nome_metodo([arg1, ..., arg2])
    serve per permettere, all'interno della definizione di una classe, di riferirsi a metodi dalla superclasse direttamente, senza che questa sia stata istanziata nel costruttore. Usare parent:: è un caloroso consiglio ma non un obbligo: infatti potete riferirvi direttamente ai metodi della superclasse con nome_super_classe::metodo.

    Consiglio caldamente tutti coloro che fossero interessati ad iniziare a darci sotto con la OOP in PHP di scaricarsi PHP-GTK e fare delle prove con lui: qui sarete obbligati ad usarle, ed iparerete a smanettarci un po. Vi allego una piccola classe PHP-GTK di esempio con esecuzione compresa. Riuscite a commentarmela correttamente line-by-line (i neofiti naturalmente, NON i secchioni...) ??

    Codice PHP:
    <?php

    class GtkApplication{
      var 
    $os;
      var 
    $mainWindow;
      
      function 
    GtkApplication(){

        if(!
    class_exists('gtk')){
          
    $this->os PHP_OS;
          if(
    strstr(strtoupper($this->os),'WIN')){
            
    dl('php_gtk.dll');
          }else{
            
    dl('php_gtk.so');
          }
        }

      }
      
      function 
    setMainWindow($mainWindow false){

        if(!
    $mainWindow){
          print 
    'You must specify a valid GtkWindow istance as setMainWindow argument';
          return 
    false;
        }else{
          
    $this->mainWindow $mainWindow;
          return 
    true;
        }
      }
      
      function 
    deleteEvent(){
        
    //print 'Event deleted';
        
    return false;
      }
      
      function 
    destroy(){
        
    //print 'Exit';
        
    Gtk::main_quit();
        return 
    true;
      }
      
      function 
    mainLoop(){
        
    $this->mainWindow->connect('destroy',array($this,'destroy'));
        
    $this->mainWindow->connect('delete-event',array($this,'deleteEvent'));
        
    $this->mainWindow->show_all();
        
    Gtk::main();
      }
    }

    /*TEST*/
    //YOU MUST ISTANCE GtkApplication AFTER istancing or extending from Gtk* classes

    $myApp = new GtkApplication();
    class 
    mainWin extends GtkWindow{
      function 
    mainWin($name '',$border 10,$dimensions false,$pos GTK_WIN_POS_CENTER){
        
    $this->GtkWindow();
        
    $this->set_border_width($border);
        
    $this->set_title($name);
        
    $this->set_position($pos);
        if(
    $dimensions){
          
    $this->set_usize($dimensions[0],$dimensions[1]);
        }
      }
    }

    $main = new mainWin('prova');
    $myApp->setMainWindow($main);
    $myApp->mainLoop();
    ?>
    Prima di chiudere ricordo che, nella programmazione ad oggetti, è fondamentale svolgere il lavoro nel modo più ordinato possibile. Strutturate bene prima il tutto (io uso UML...ma va bene anche un foglio di carta...magari non igenica, che se piove sparisce...), poi cominciate a scrivere le classe. Dovete partire da un'idea per scrivere qualcosa di ideale dal quale tirare fuori i vostri oggetti. E finchè le idee sono in testa, è come nascondere dei soldi nel buco del cesso di un aereoporto in Kenia...

    è tardi: le malboro si fanno sentire, il sonno pure...domani altro giorno altra corsa...si va all'università e si va al lavoro...si mangia e si sco*a...vabbo. Spero sia servita qualcuno questa pillola. Se non vi è servita, fa niente.

    Un grazie a Saibal che oggi pome mi ha fatto pisciare addosso dal ridere leggendo le stronzate della sezione Amacord del suo sito...

    'notte e buona lettura

    P.s: siccome è possibile che mi sia dimenticato qualcosa, fatemelo sapere e provvederò ad editare.Ci sono un po di fUnzioni interessanti relative alle classi, magari ve ne parlerò in seguito.
    eXtending-Php.net coming soon ...

  3. #3
    Utente di HTML.it L'avatar di Jaozi2
    Registrato dal
    Apr 2001
    Messaggi
    11
    ottima pillola, ne sentivo il bisogno. ogi sono troppo stanco per leggerla però
    e-mail
    Siamo qualcosa che non resta: frasi vuote nella testa e il cuore di simboli pieno.
    --------------------
    Quo usque tandem abutere patientia nostra?

  4. #4
    ciccio.... è fatta talmente bene che se vuoi te la pubblico su freephp
    w la topa

  5. #5
    Utente di HTML.it L'avatar di aserena
    Registrato dal
    Feb 2003
    Messaggi
    310
    ..... Allora non scherzavi quando dicevi che l'avresti scritta davvero!! Complimenti per la pillola, l'aspettavo da molto tempo...

    Ciao!!
    La (!) è quella roba che in autunno si intristisce... perche': seccano i piselli, migrano gli uccelli, cadono i marroni, e se poi c'è anche la nebbia non si vede più un caXXo!! by Piero.mac @07/05

  6. #6
    Originariamente inviato da saibal
    ciccio.... è fatta talmente bene che se vuoi te la pubblico su freephp
    più che onorato Magister...
    eXtending-Php.net coming soon ...

  7. #7
    Aggiunta al thread in rilievo
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  8. #8
    eh eh eh...

    bellizzima pillola!!!
    mi ha "schiarito" un po le mie poche ma confuse idee (come dice sempre GM) sulle GTK :P (te dirai ma che c'entra...non capivo quel gtk::main DD ora l'ho capito :P richiama il metodo main della classe GTK non istanziata :P)

    danka!

    [OT=php-gtk]
    mmm cappio...ma manco mi si vogliono installare le gtk!!!
    mmm how to do?

    mo ora me lo faccio dire da gm...lui le ha messe! :P
    [/OT]

  9. #9
    Originariamente inviato da Dark Bard
    più che onorato Magister...

    ok...facciamo così: io la inserisco la settimana prossima. se vuoi fare qualche correzione hai tempo.

    come autore dell'articolo che metto? il tuo nick o il tuo nome (che neanche so?)
    w la topa

  10. #10
    mi sono rimasti solo un paio di quesiti:
    1) se ho un costruttore nella classe padre e uno nella classe figlia,
    che non ha nessun riferimento al suo interno al costruttore padre,
    viene eseguito il costruttore padre?
    es:
    Codice PHP:
    class prova {
    function 
    prova()
                  {echo 
    "so figo, so bello, so fotomodello!";
                   }
    }

    class 
    prova2 {
    function 
    prova2()
                  {echo 
    "so figo, so bello, so fotomodello, ma non mi tira l'ucc....";
                   }
    }
    //cosa stampera? il padre il figlio o tutti e due?

    //e se in prova2 metto
    function prova2{
                
    $this->prova();
                echo 
    "ciao";
    }
    //mi stamperà quello che dice il costruttore di prova? 
    2) l'uso di parent
    tu hai scritto
    Codice PHP:
    parent::nome_metodo([arg1, ..., arg2]) 
    ma allo stesso tempo usi
    Codice PHP:
    $this->essereVivente($specie,$ambiente); 
    cioè richiami il costruttore padre con $this, ma affermi che
    si può fare anche con parent, differenze?
    e se richiamo nel mio caso il costruttore del padre?
    parent :: prova();

    e come se usassi all'interno del costruttore del figlio
    $this->essereVivente($specie,$ambiente);?

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