Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Classi e parametri

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3

    Classi e parametri

    Salve a tutti, stavo cercando di capire meglio le tecniche di programmazione OOP e dando un'occhiata a molti esempi online mi é venuto un dubbio che non so quanto sia pertinente.
    Prendete queste due classi.
    LA PRIMA
    Codice PHP:
    <?php

    class Persona {
        
        private 
    $nome null;
        private 
    $cognome null;
        
        function 
    __construct($nome$cognome) {
            
    $this->nome $nome;
            
    $this->cognome $cognome;
        }    
        
        public function 
    scriviNomeCompleto() {
            
            return 
    $this->nome.' '.$this->cognome;
        }
        
    }

    $p = new Persona("Mario""Bianchi");

    echo 
    $p->scriviNomeCompleto();
    ?>
    LA SECONDA

    Codice PHP:
    class Persona {
        
        public 
    $nome null;
        public 
    $cognome null;
        
        public function 
    scriviNomeCompleto() {
            
            return 
    $this->nome.' '.$this->cognome;
        }
        
    }

    $p = new Persona;
    $p->nome "Mario";
    $p->cognome "Bianchi";

    echo 
    $p->scriviNomeCompleto();

    ?> 
    Entrambe restituiscono lo stesso risultato, il mio dubbio é: che differenza sostanziale c'é? E' solo una differenza di stile di programmazione oppure una é preferibile all'altra?
    Dal punto di vista dell'utilizzo delle risorse e della sicurezza, quale delle due é preferibile?

    Grazie.

  2. #2
    Quelli che hai postato sono esempi di utilizzo di classi che ti mostrano come puoi ottenere lo stesso risultato in modi diversi. Nel primo caso utilizzando il costruttore, nel secondo valorizzano le proprietą.

    Non esiste un modo migliore. Dipende dai casi e su classi del genere č difficile spiegarlo, ma quando ti troverai di fronte a progetti di una certa dimensione, č chiaro che scegliere una strada piuttosto che un'altra puņ fare differenza.
    PHP LEARN - Guide, tutorial e articoli sempre aggiornati
    NUOVO: standardLib; il potente framework PHP é ora disponibile
    *******************************************
    Scarica oggi la tua copia di MtxEventManager

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    In generale, viene considerata buona pratica tenere private le variabili di classe, come nel primo esempio, e fornire dei metodi di accesso (i cosiddetti "getter" e "setter").
    Il motivo di ciņ č che in questo modo si mantiene il controllo su ciņ che viene impostato nei campi.
    Immagina di avere un campo numerico che, per motivi di logica della classe, deve avere un valore compreso fra 1 e 10. Se il campo č pubblico, chiunque usi quella classe puņ fare

    $oggetto->campo = 11

    stravolgendo la logica di base.
    Se invece il campo č privato e hai un metodo setter di questo tipo

    Codice PHP:
    function setCampo($val) {
      
    $this->campo $val;
      if (
    $this->campo 1$this->campo 1;
      if (
    $this->campo 10$this->campo 10;

    non avrai mai un valore incongruente in quel campo.
    Questo č un esempio banale, potresti anche gestire un sistema di notifica di eventuali valori non validi passati, ad esempio lanciando eccezioni, o prevedere che un valore non valido lascia immutato il valore precedente, invece di impostare il valore limite come ho fatto io. Insomma puoi fare quello che ti pare


    Il codice del primo esempio che hai postato si ispira a questa filosofia, anche se per impostare i valori utilizza il costruttore e non metodi setter. In questo caso la cosa puņ essere giustificata, ad esempio, considerando che il nome di una persona č immutabile. Ma in un'ottica pił generica, quel codice ha il difetto di non consentire la modifica dei valori dopo la creazione dell'oggetto.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3
    Perfetto, gentilissimi.
    Sinceramente mi piace molto di piś l'idea di evitare dove possibile l'invio di parametri tipo stringhe o integer, mi sembra piś flessibile, il dubbio era che ci fossero delle 'controindicazioni'.
    Per fare un esempi concreto, mettiamo che voglia inserire i dati dell'oggetto in un db, qualcosa di simile
    Codice PHP:
    $p = new Persona;
    $p->nome 'nome';
    $p->cognome 'cognome';
    $p->insertToDb(); 
    Mi sembra piś flessibile che mandare parametri tipo $p->insertTodb($nome,$cognome).
    Ovviamente é giusto il concetto della validazione dei dati, per cui invece di proprietį pubbliche si potrebbero creare metodi pubblici che settano proprietį private.
    Altro dubbio, usare i metodo magici __set e __get come pubblici con proprietį private, non é la stessa cosa che avere proprietį pubbliche, con l'unica differenza che i controlli sui dati li fai solo dentro il metodo __set?

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Katija
    Altro dubbio, usare i metodo magici __set e __get come pubblici con proprietį private, non é la stessa cosa che avere proprietį pubbliche, con l'unica differenza che i controlli sui dati li fai solo dentro il metodo __set?
    Non č una differenza da poco... nell'altro caso dove li fai?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3
    Originariamente inviato da luca200
    Non č una differenza da poco... nell'altro caso dove li fai?
    Forse mi sono spiegata male.
    Facciamo un esempio pratico.

    Ho due variabili private var1, var1 e due metodo pubblici setVar1 e setVar2.
    Ho la libertį per ciascuna variabile di fari gli opportuni controlli.
    Con __set invece dovrei anche intercettare che proprietį sto controllando.
    Qualcosa tipo switch ($variabile) case "var1": etc. etc.
    Mi sbaglio? Mi sfugge qualcosa?

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    No, non sbagli.

    Perņ la tua frase precedente mi rimane poco chiara

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.