Vediamo se posso aiutarti a fare chiarezza.
La programmazione a oggetti è semplicemente una descrizione di un "micromondo". Una classe rappresenta uno "stampino" per un
oggetto del micromondo.
Gli attributi (o proprietà) servono per descrivere lo stato in cui si trova un oggetto.
Le "proprietà di classe" (quelle static per intenderci) invece descrivono una proprietà comune a tutti gli oggetti di una classe.
Le costanti di classe invece sono semplicemente delle costanti che hanno un ambito di validità interno alla classe: invece di crearle con define('COST', VAL) le crei con la parola chiave const
Per fare un esempio pratico: immagina di dover creare un videogioco in cui ci sono dei mostri. Devi visualizzare il numero di mostri complessivo nel livello, la vita di ciascun mostro e la razza aliena a cui appartengono.
Il numero di mostri di quel tipo è una proprietà della classe di mostri
La vita rimanente è un attributo di un singolo mostro
Il nome della specie aliena potrebbe (ma anche no) essere salvato in una costante. Quindi verrebbe una cosa del genere:
code
class Mostro_Zurg
{
const SPECIE = 'Zurg';
private $vita = 100;
private static numeroMostri;
public function __construct() {
self::numeroMostri++;
}
//..altri metodi per gestire i mostri
}
Ovviamente, dato che il qualificatore static rende un attributo/metodo condiviso a tutti gli oggetti di una classe, non è possibile accedere agli attributi di un singolo oggetto. Ad esempio questo sarebbe un errore:
code
public static stampaVita()
{
echo $this->vita;
}
Questo perché il metodo stampaVita è richiamabile anche senza aver instanziato nessun oggetto Mostro_Zurg (quindi non esisterebbe alcuna vita da mostrare).
Per le costanti invece il discorso è diverso: sono solo delle costanti, solo definite all'interno di una classe, e puoi richiamarle da qualunque parte del codice, con o senza oggetti instanziati (cfr [l:
http://www.php.net/manual/en/l... php: class constants])
E questa è solo la superficie: ci sarebbero da fare anche altre considerazioni sui vari qualificatori, ma forse mi sono dilungato troppo
Comunque se posso darti un consiglio (a me è servito): prova a leggere un libro su Java. Essendo l'Object Oriented un metodo obbligato in quel contesto (ed essendo i libri più precisi su terminologie e concetti) ho trovato la mia programmazione PHP migliorata dopo lo studio di quel linguaggio