Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858

    [php] semplice problema didattico con OOP

    ciao

    premetto che l'OOP non mi piace, ma nonostante questo voglio capire una cosa: perchè il seguente codice produce questi
    risultati??

    codice:
    codice:
    error_reporting(E_ALL);
    
    class pippo {
    	var $cont;
    	function pippo(){
    		$this->cont = 0;
    	}
    	function pluto(){
    		$this->cont++;
    		return 'stampa qualcosa';
    	}
    }
    class topolino extends pippo {
    	function topolino(){
    	}
    	function minni(){
    		$this->pluto();
    	}
    }
    $pippo = new pippo();
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    
    $topolino = new topolino();
    $topolino->minni();
    echo $topolino->pluto().' '.$topolino->cont.'<hr />';
    echo $topolino->pluto().' '.$topolino->cont.'<hr />';
    echo $topolino->pluto().' '.$topolino->cont.'<hr />';
    risultati:
    codice:
    stampa qualcosa 1
    stampa qualcosa 2
    stampa qualcosa 3
    stampa qualcosa 2
    stampa qualcosa 3
    stampa qualcosa 4
    sicuramente ho sbagliato qualcosa, mi piacerebbe capire cosa



    think simple think ringo

  2. #2
    codice:
        function minni(){
        $this->pippo();
      }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    non ho capito.. cosa ti aspetteresti?

    quando su8tanzi il nuovo oggetto figlio non erediti dal padre il valore che aveva prim [se è quello che ti aspettavi ] ma stanzi un nuovo valore 0 che incrementi due volte (prima con minnie() che richiama pluti() e poi con pluto() stessa..]

    in ultimo: sarebbe meglio non stampatyi da fuori la classe una variabile interna alla classe (anche se non l'hai dichiarata privata), ma usare un metodo apposito (che fa parte dei metodi getters dell'interfaccia)


  4. #4
    non ho capito.. cosa ti aspetteresti?

    quando su8tanzi il nuovo oggetto figlio non erediti dal padre il valore che aveva prim [se è quello che ti aspettavi ] ma stanzi un nuovo valore 0 che incrementi due volte (prima con minnie() che richiama pluti() e poi con pluto() stessa..]

    in ultimo: sarebbe meglio non stampatyi da fuori la classe una variabile interna alla classe (anche se non l'hai dichiarata privata), ma usare un metodo apposito (che fa parte dei metodi getters dell'interfaccia)


  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da piero.mac
    codice:
        function minni(){
        $this->pippo();
      }
    [/supersaibal]
    già meglio



    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    quando su8tanzi il nuovo oggetto figlio non erediti dal padre il valore che aveva prim [se è quello che ti aspettavi ] ma stanzi un nuovo valore 0 che incrementi due volte (prima con minnie() che richiama pluti() e poi con pluto() stessa..]
    [/supersaibal]
    non è possibile ereditare quel valore? cioè poter incrementare il cont fino a 6, ovvero una cosa questo tipo:
    codice:
    stampa qualcosa 1
    stampa qualcosa 2
    stampa qualcosa 3
    stampa qualcosa 4
    stampa qualcosa 5
    stampa qualcosa 6




    think simple think ringo

  6. #6
    [supersaibal]Originariamente inviato da marketto
    già meglio




    non è possibile ereditare quel valore? cioè poter incrementare il cont fino a 6, ovvero una cosa questo tipo:
    codice:
    stampa qualcosa 1
    stampa qualcosa 2
    stampa qualcosa 3
    stampa qualcosa 4
    stampa qualcosa 5
    stampa qualcosa 6




    [/supersaibal]
    estendere una classe vuol dire semplicemente modificarne o arricchirne l'interfaccia... istanziare un'oggetto di una classe che estende una per cui avevi già creato l'oggetto non vuol dire "ereditare" l'oggett... vuol dire avere un nuovo oggetto che eredita i metodi della classe madre.. punto e basta

  7. #7
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    estendere una classe vuol dire semplicemente modificarne o arricchirne l'interfaccia... istanziare un'oggetto di una classe che estende una per cui avevi già creato l'oggetto non vuol dire "ereditare" l'oggett... vuol dire avere un nuovo oggetto che eredita i metodi della classe madre.. punto e basta [/supersaibal]
    okey, la prendo per buona


    una cosa di questo tipo è corretta? o meglio, è lecito usare global in questo modo?
    codice:
    class pippo {
    	var $cont;
    	function pippo(){
    		$this->cont = 0;
    	}
    	function pluto(){
    		$this->cont++;
    		return 'stampa qualcosa';
    	}
    }
    class topolino {
    	function topolino(){
    	}
    	function minni(){
    		global $pippo;
    		$pippo->pluto();
    	}
    }
    $pippo = new pippo();
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    echo $pippo->pluto().' '.$pippo->cont.'<hr />';
    
    $topolino = new topolino();
    $topolino->minni();
    $topolino->minni();
    $topolino->minni();
    echo $pippo->cont.'<hr />';


    think simple think ringo

  8. #8
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    non so perchè ma il forum dava come ultima risposta quella di guidoz, quindi uppo
    think simple think ringo

  9. #9
    oddio.. qui dovresti chiamare gli esperti.. io conosco benino le basi ma non uso mai la oop

    Cmq temo che i puristi oop storcerebbero un po' tanto il naso

  10. #10
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    oddio.. qui dovresti chiamare gli esperti.. io conosco benino le basi ma non uso mai la oop

    Cmq temo che i puristi oop storcerebbero un po' tanto il naso [/supersaibal]
    temo anch'io


    aspetto altre risposte
    think simple think ringo

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.