Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [PHP5] Perchè "private"? ...

    Salve,

    non ho capito bene a cosa serve il modificatore "private".
    Ho capito cosa fa, ma non ho capito quando si deve utilizzare...
    Lo stesso vale per "static" e "protected".
    Perchè non rendere tutto pubblico?
    C'è qualche differenza di velocità? O serve solo per avere una struttura migliore (non ho capito ancora però...)?

  2. #2
    fai che metti private, da fuori la class nn possono modificarti quel valore
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  3. #3

    Re: [PHP5] Perchè "private"? ...

    [supersaibal]Originariamente inviato da ZoneForum
    Perchè non rendere tutto pubblico?
    C'è qualche differenza di velocità? O serve solo per avere una struttura migliore (non ho capito ancora però...)? [/supersaibal]
    perchè è uno dei principi della OOP: un'interfaccia mediante la quale ottieni ciò che vuoi senza curarti di quello che c'è dentro.

    Per guidare la macchina ui 3 pedali uno sterzo ed una leva... eppure ci stanno migliaia di componentio e meccnaismi vari.. tu non devi conoscerli.. devi solo usare l'interfaccia... tutto qui... inutile rendere public qualcosa che non serve da fuori...


  4. #4
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    Concordo...se un metodo non serve a chi userà quella classe meglio farlo private o protected.
    Se tutto fosse pubblico potrebbero più facilmente verificarsi errori ad esempio modificando variabili che non devono essere modificate direttamente!
    Come diceva guidoz, se i costruttori di macchine non mettessero i motori dentro al cofano ci si potrebbe fare male!!!
    Non conosco il PHP5 comunque in C++ si fa largo uso di questi modificatori inclusi i modificatori const in modo da sapere esattamente la tipologia di operazioni ammesse per quell'oggetto.

  5. #5
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    Chiedevi anche la differenza tra private, protected, static...non avevo letto bene.

    Beh...private l'hai capito...nessuno tranne la classe stessa può accedere a un membro (funzione o variabile) privata.
    Se lo fai qualcuno ti segnala errore. Nel caso del C++ o java sarà il compilatore nel caso di PHP l'interprete.
    Differenze di velocità non ce ne sono...se non nello sviluppo di app serie.

    Protected è simile a private ma permette l'accesso anche da parte di una classe derivata. Quindi un membro protected è public per le classi derivate ma private al di fuori.

    static è completamente diverso...una funzione o variabile statica la devi pensare come comune a tutti gli oggetti della stessa classe (e loro derivazioni).
    Quindi se modifico una variabile statica la modifico per tutti gli oggetti mentre una var ordinaria può avere valori diversi per diverse istanze della stessa classe.
    Una funzione statica o una variabile ordinaria possono essere usate indipendentemente dall'istanzializzazione della classe proprio perchè esistono sempre.


  6. #6
    in pratica questi modificatori permettono al programmatore il pieno controllo dell'applicazione.

    Sono molto utili sopratutto quando si lavora in team.

    Ti faccio un esempio pratico.

    Hai una classe con una proprietà x
    Quando si modifica x, automaticamente y deve assumere il valore x/2

    Se non si potesse dichiarare privata un tuo collega potrebbe modificae il valore di x dall'esterno (altra classe) ma dimenticarsi di modificare il valore di y e questo sarebbe un problema grosso.

    Quindi la proteggi e crei un metodo pubblico che modifica il valore di x e imposta y nel giusto modo.

    Questo è un'esempio banale ma dovrebbe rendere l'idea

  7. #7
    piu' o meno ti hanno detto tutto, manca solo il fatto che lavorare ad oggetti spesso comporta l' utilizzo di piu' oggetti, interfacce, classi astratte e classi che estendono altre classi ... anche in questi casi i metodi sono molto importanti ...

    un metodo private non viene ereditato dalla classe che estende la classe stessa, o meglio, non puoi richiamarlo internamente ... mentre un metodo protect puo' essere richiamato da dentro una classe ma mai dall' esterno della classe e viene ereditato come accessibile anche dalle sotto classi ...

    sia protect che public hanno la possibilita' di essere sovrascritte con metodi ridefiniti nelle sotto classi , questo ti permette di fare override dei metodi predefiniti .

    Per evitarlo e' sufficiente utilizzare final come ulteriore attributo, cosi' da avere metodi ereditati ma non sovrascrivibili .

    Per esempio su una gerarchia di classi Uomo tutte le varianti avranno un getAge() che ritornera' sempre e solo l' eta' della persona ... ed uno setAge( (int) ) che settera' sempre e solo l' eta' di una persona ... questi 2 metodi dovranno si essere pubblici ma non dovranno per nessun motivo essere ridefiniti ... allora eccoti un bel

    final public function getAge() { return $this->age; }

    ed un

    final public function setAge( $age ){ $this->age = (int) $age; }


    questo per dire che non sempre public corre il rischio di essere sovrascritto o modificato
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Capito tutto.
    Grazie mille



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.