Newsgroup: it.comp.www.php
Titolo: variabili private

ciao
in una classe var e private hanno ugual significato?
Inoltre l'underscore posto prima di una variabile in php ha qualche 
significato?
grazie

 significato?
No, lo puoi usare come convenzione. Io lo uso per le variabili protected, 
mentre per le private tendo a usare il doppio underscore, ma non e` una 
cosa matematica, anche perche` uso poco protected e quasi nulla private.
Bye.

Alessandro Pellizzari ha scritto:

Ti ringrazio
p.s. in che senso usi poco private?

 p.s. in che senso usi poco private?
Nel senso che uso sempre public e qualche volta protected... :)
private e` troppo restrittivo. Soprattutto in un linguaggio come PHP e` 
praticamente inutile. Sarebbe stato piu` utile uno stato "namespace 
shared" o qualcosa del genere.
Bye.

Il 02/06/10 17.38, Alessandro Pellizzari ha scritto:

e come fai ad implementare l'incapsulamento?

 e come fai ad implementare l'incapsulamento?
Intendi la sfilza di getter e setter che Java ti costringe a fare?
Ti rispondo con una domanda: a cosa serve realmente?
Non nella teoria, proprio nella pratica. Ti avverto che puo` diventare 
una discussione lunga, e la mia risposta alla fine potrebbe essere "magic 
methods". ;)
Bye.

 Ti rispondo con una domanda: a cosa serve realmente?
Per evitare che lo stato dell'oggetto venga corrotto, decidendo tu quali
 field possono essere settati dall'esterno e in che modo.
	Y.

Il 04/06/10 12.28, Alessandro Pellizzari ha scritto:

capisco che puoi utilizzare __set/__get... e fare un overload dei metodi 
con dentro uno switch.... però dal punto di vista teorico non è corretto 
dire che nascondere attributi o function di una classe sia inutile. E' 
inutile esporre metodi/attributi che non saranno utilizzati al di fuori 
della classe. E' una programmazione ad oggetti non pulita...

Il 04/06/10 12.28, Alessandro Pellizzari ha scritto:

Oltretutto in Java non sei costretto a fare i setters e i getters. Puoi 
esporre tutti gli attributi ed accederci direttamente. E' solo buona 
programmazione...

 programmazione...
Come ho detto, e` una discussione lunga.
In Java ne sei costretto perche` altrimenti non puoi rifattorizzare in 
seguito, se non cambiando tutto il codice che accede a quei parametri.
Per rispondere a yossarian, in che modo
public pippo;
e
private pippo;
public function setPippo(val) { this.pippo=val; }
differiscono nel proteggerti dalla corruzione dello stato dell'oggetto? 
Eppure praticamente tutti gli IDE Java creano quasi automaticamente getter 
e setter per le variabili private.
Non e` buona programmazione, e` programmazione costretta dalle 
limitazioni del linguaggio.
In PHP oggi puoi scrivere
public $pippo;
e domani, se vuoi controllarne il valore, trasformarlo in 
private $_pippo;
public function __set($var, $val) {
 if ($var == 'pippo' && tuacondizione) { $this->_pippo = $val; }
}
Senza cambiare una riga di tutto il resto del codice che accede a pippo.
Ma c'e` un'altra cosa che ancora nessuno ha citato: perche` uso protected 
e non private? Fanno la stessa cosa, ma protected permette di accedere 
alla variabile dai discendenti della classe. Ecco perche` non uso private 
e ho detto che e` troppo restrittivo.
Quanto volte vi e` capitato di scrivere la classe definitiva? Quella che 
fa tutto senza bisogno di estensioni o di personalizzazioni?
Ecco, appunto. :)
Continuando il discorso: perche` volete assolutamente proteggere lo stato 
dell'oggetto? Da chi?
Il programmatore che usa quella classe ha tutto l'interesse che il suo 
software funzioni e continui a funzionare in futuro, quindi deve essere 
proprio scemo per andare a mettere valori sbagliati (per esempio un array 
al posto di un intero) dentro una variabile della classe.
Allora sara` sua cura andare a vedere a cosa serve quella variabile e che 
valori accetta, prima di infilarci roba a caso e rischiare 
malfunzionamenti futuri (o presenti). E sara` cura di chi ha scritto 
quella classe andare a documentarla o a renderne il codice talmente 
chiaro da non generare dubbi sul valore che puo` assumere quella 
variabile.
Rimane la domanda: se non vi state proteggendo da voi stessi (che sapete 
cosa va passato) e non vi state proteggendo da chi usera` per i suoi 
interessi la vostra classe, da chi state cercando di proteggerla?
Ecco perche` uso poco anche protected. :)
Bye.

 al posto di un intero) dentro una variabile della classe.
Anche chi usa un database deve essere proprio scemo per andare a mettere
valori sbagliati dentro a una colonna. Allora a che servono i datatype e
i constraint?
Io sono un adepto del profeta Murphy e assumo sempre che se in un
oggetto possono finire valori sbagliati, prima o poi ci finiranno. Poi
ognuno si regola come preferisce...
Ciao
	Y.

 ognuno si regola come preferisce...
Anche io. Ma sono anche dell'idea che il programmatore ha tutto 
l'interesse affinche` non ci finiscano, e che non e` con private che ti 
proteggi.
Meglio inserire dei check quando quei valori vengono usati dalla classe 
stessa.
Questo ti permette anche di espandere la classe in futuro.
Capitato giusto ieri: ho fatto una classe che accetta un colore come 
parametro. Progettata per accettare un array(r,g,b), l'ho modificata (con 
un semplice is_string()/is_array() per accettare anche una stringa "#rgb" 
e una "#rrggbb".
In Java avrei dovuto fare due setter, due getter, due variabili private 
(una string e una array) piu` una "flag" che mi dicesse quale delle due 
usare al momento del rendering. Volendo aggiungere il futuro il canale 
alpha, altre due setter, due getter, una var privata (array(4) invece di 
array(3)).
Se non corrisponde ai formati supportati, al rendering sollevo 
un'eccezione e amen. :)
Tanto stiamo comunque usando un linguaggio interpretato. Si sa che gli 
errori non vengono fuori in compilazione (nemmeno nei linguaggi 
compilati, a dire il vero).
Bye.