dal 2015 - visita n. 1554
php objects parte 2
php objects parte 2

 

Le variabili della classe

Come si è visto è abbastanza facile definire le funzioni per le classi, ed è altrettanto facile definire le variabili per le classi. Ecco, per esempio, una nuova definizione per la classe cane:

class cane {
    public $Name;

    public function abbaia() {
        print "Bau!\n";
    }
}  

La riga public $Name; definisce una variabile pubblica denominata $Name che sarà posseduta da tutti gli oggetti della classe cane. PHP consente di specificare come le variabili debbano essere lette, e c'è anche la possibilità di nasconderle, ma per ora utilizzeremo la modalità public.

Quando si progettano le classi è il caso di valutare l'ipotesi di porre un carattere underscore davanti ai nomi delle variabili oggetto, in modo da distinguerli dai parametri passati alle funzioni di un oggetto ed anche dalle variabili locali. Non lo si è applicato adesso sia per una questione di chiarezza sia per evitare di far pensare che sia una cosa obbligatoria.

Adesso possiamo assegnare il Fuffy usando questo codice:

$fuffy->Name = "Fuffy"; 

Da notare 2 cose:

La seguente scrittura sarebbe errata:

$fuffy->$Name = "Fuffy"; 

Le variabili di PHP hanno un solo segno di dollaro. In questo caso ci troveremmo di fronte ad una variabile variabile. PHP cercherà di trovare una ipotetica variabile interna di $fuffy, chiamata $Name, ed assegnargli il valore "Fuffy". Ad esempio il codice seguente potrebbe funzionare, ma sarebbe una specie di follia:

$fuffy= new barboncino;
$foo = "Name";
$fuffy->$foo = "Fuffy";
print $fuffy->Name;  

"Fuffy", infatti verrebbe assegnato a $fuffy->Name !
Pur essendo possibile gestire delle variabili variabili, del tipo $$foo, queste acrobazie vengono lasciate generalmente solo a programmatori PHP esperti.

Come già detto, ciascun oggetto ha il suo insieme di variabili che sono indipendenti da quelle di un altro oggetto della stessa classe, anche se hanno lo stesso nome. Riflettere sul seguente codice:

$poppy = new barboncino;
$penny = new barboncino;
$poppy->Name = "Poppy";
$penny->Name = "Penny";
print $poppy->Name; 

che produrrà in output "Poppy", perchè le variabili di Penny sono separate da quelle di Poppy.
Da questa semplice situazione si può cominciare a vedere come questi modelli OOP riflettano scenari appartenenti al mondo reale.


La variabile 'this'

Una volta che si è all'interno di una funzione di un oggetto, si ha il completo accesso alle sue variabili interne. Per riferirsi con sicurezza ad esse, ed evitare ambiguità, è sufficiente o premettere il nome dell'oggetto o premettere la variabile $this, che viene automaticamente impostata da PHP all'atto della creazione di un detereminato oggetto dandole proprio il nome dell'oggetto. Per esempio:

function abbaia() {
    print "{$this->Name} dice Bau!\n";
} 

premette al messaggio il contenuto della variabile interna $Name relativa all'oggetto considerato.


Oggetti all'interno di oggetti

È possibile utilizzare oggetti all'interno di altri oggetti, allo stesso modo di altri tipi di variabili. Ad esempio, potremmo definire una classe dogtag e dare ad ogni cane un oggetto dogtag come questo:

class dogtag {
    public $Words;
}

class cane {
    public $Name;
    public $DogTag;

    public function abbaia() {
        print "Bau!\n";
    }
}

L'accesso a questi oggetti avviene con l'operatore -> allo stesso modo già visto negli altri casi:

$poppy = new cane;
$poppy->Name = "Poppy";
$poppy->DogTag = new dogtag;
$poppy->DogTag->Words = "Mi chiamo Poppy. Se mi trovi, chiama il 567.1234"; 

Da notare che la variabile $DogTag viene dichiarata come al solito, ma deve essere creata con new dopo la creazione di $poppy.


















Menù
Introduzione
Ambiente di sviluppo
intro php-01
tag e commenti php-02
variabili e tipi php-03
operatori php-04
php IF esercizi
php FOR esercizi
php objects intro
php objects parte 1
php objects parte 2
php objects parte 3
php objects parte 4
php objects parte 5
CLIL
php socket intro
php socket parte 1
php socket parte 2
php socket parte 3
php socket parte 4
php socket parte 5
php socket parte 6
php socket extra
linux netcat


MiniGuida PHP
Guida Ufficiale PHP (en)
Form Base
Flat DataBase
Pagine Protette
mySQL



La maggior parte delle volte si ricerca la felicità come si ricercano gli occhiali quando si hanno sul naso.
Droz

Valid CSS!
pagina generata in 0.003 secondi