PHP Programmazione a Oggetti

Introduciamo con questo Capitolo quella che è la programmazione a oggetti. Dalla versione 5 in poi anche il PHP mette a disposizione dei programmatori , tutta quella che è l’ampio mondo delle possibilità degli oggetti. Senza perderci tanto in discorsi introduciamo subito l’argomento.

La programmazione a Oggetti in PHP

PHP Programmazione a Oggetti

Un oggetto è un’etità logica che contiene sia i dati sia il codice che manipola.

Gli oggetti che hanno la stessa natura sono categorizzabili in classi. Una classe è un tipo di dato che al suo interno definisce tutta la struttura degli oggetti che vuole classificare

Una classe a sua volta puo’ contenere

  • gli attributi, detti anche proprietà, ossia la struttura dei dati che descrive una classe di oggetti;
  • I Metodi sono le operazioni che possono essere compiute all’interno dell’oggetto e in particolare sugli attributi.

Uno dei punti cardine della programmazione a oggetti è il polimorfismo, ossia la possibilità di creare interfacce e metodi che siano applicabili a oggetti di diversa natura. L’altro è l’Ereditarietà ossia una gerarchia fra classi che hanno tra loro un legame stretto, in gergo si parla di parentela in quanto queste classi condividono metodi e attributi.

Ma questa era soltanto l’esposizione degli argomenti che andremo a trattare nel corso della lezione espliciteremo il tutto in maniera piu’ concreta.

Quindi partiamo subito con la definizione in concreto di una classe, utilizzando la seguente sintassi.

class NomeClasse extends NomeSuperClass

{

//dichiarazione attribut

//dichiarazione dei costruttori

//dichiarazione dei metodi

 

 

facciamo un esempio tipico per iniziare a chiarire meglio

<?php

class persona

{

//attributi

private $name;

//creiamo un metodo di tipo costruttore

public function construct($n)

{

$this->name =$n;

}

//questi invece sono i metodi

public function getName()

{

return $this->name;

}

}

?>

<html>

<head></head>

<body>

<?php

$uomo = new persona ("Filippo");

print ("Il primo nome immesso è " $utente->getName());

$uomo = new persona("Mario");

print ("Il secondo nome che hai immesso è . $utente->getName());

?>

</body>

</html>

vogliamo porre risalto sulla seguente sintassi che si estrapola da questo esempio. Ossia è stato posto un metodo privato , qeusto significa che lo stesso non è visibile , nè utilizzabile al di fuori della classe, ma puo’ essere impiegato esclusivamente da metodi interni alla classe stessa.

Per accedere al contenuto di questa propieta si utlizza un metodo particolare che si chiama getName().

Mentre per accedere alla varibile interna si utilizza la sintassi.

$this -> nomevariabile

 

Nell’esempio che abbiamo appena visto esiste anche il metodo __construct che altro non è che il metodo costruttore di classe, ossia un metodo che deve avere lo stesso nome della classe e viene eseguito prima di ogni altro metodo stesso. In genere riceve come parametri solamente quelli necessari all’inizializzazione dei valori delle proprietà interne.

Ovviamente come esiste il metodo costruttore la cui sintassi è

public functin __construct(variabili che inizializzano)

esiste anche il suo opposto ossia il metodo distruttore la cui sintassi è data da




public function __destruct {

//istruzioni

}

Passiamo adesso ad un altro concetto fondamentale della programmazione ad oggetti che è l’ereditarietà.

 

Ereditarietà vuol dire che una classe eredita da una superclasse una parte dei suoi metodi.Una volta che una sottoclasse ha ereditato i metodi da una superclasse li si puo’ utilizzare come se fossero dei suoi metodi, ma vediamone subito un esempio tanto per chiarire il concetto.

 

<?php

classe mammifero

{

private $name;

privaete $element;

pubblic function getName()

{

return $this -> name;

}

protected function setName($n)

{




$$this -> =$n;

}

public function getElement()

{

return $this -> element;

}

protected funtion setElement($e)

{

$this -> element=$e;

}

}

class gatto extends mammifero

{

public function __costruct($n)

{

$ths -> setName($n);

$this->setElement("Pianeta");

}

}




?>




<html>

<body>




$mycat = new gatto("baubau");

print ("il mio gatto $mycat$thisgetName

</body>

</html>

Come si vede dalla parola stessa abbiamo fatto uso dell’ereditarietà nella classe che estende gatto e animale, dunque la sintassi dell’ereditarietà è la seguente

 

class nuovaclasse extends superclasse

{

//istruzioni

}

 

I Modificatori di Accesso Pubblic private e protected

 

vi parliamo adesso dei modifcatori di accesso public private e protected, ma partendo subito da un esempio.

class animale

{

public $nome;

private $habitat;

public function gethabitat()

{

return $this -> habitat;

}

protected function sethabitat($e)

{

$this -> habitat=$e;

}

private function aggiorna($valori)

{

//implenta l'aggiornamento dei dati

}

}

Quindi a questo punto diamo le oppotrune definizioni.

  • Un attributo privato è visubile soltanto all’interno del corpo stesso della classe.
  • Un attributo pubblico invece è visibile sia all’interno della classe che quanto chiamato direttamente da uno script esterno che utilizza istanze della classe stessa.

Con questa lezione sulla programmazione per oggi terminiamo qui ma continueremo domani con la programmazione a oggetti proprio a partire dagli overloading.