PHP orientat a objectes
PHP orientat a objectes

 

Quan a principis dels anys 80 es va començar a experimentar la Programació Orientada a Objectes (POO) aquesta ha anat suplantant la programació tradicional, per aquesta raó i encara PHP no sigui orientat a objectes, PHP incorpora les seves principals característiques perquè puguem treballar amb classes i objectes. 
 

Taula de contingut

 

 

 

 

Classes i Objectes

Per entendre la programació orientada a objectes hem primer entendre el que és una classe, però primer direm que un objecte és un conjunt d'atributs i mètodes agrupats. Una classe és un grup d'objectes que comparteixen els mateixos atributs i mètodes, vegem com podem crear una classe anomenada Imatge :

000 <? Php
001 class  Imatge  { // Aquí el codi de la classe }
002 ?>  

 

 

 

 

 

 

Mètodes i atributs

Aquesta classe contindrà un seguit d'atributs, que definirem amb la paraula reservada var, i mètodes, que programarem com a funcions usant function. Per crear un objecte de tipus imatge s'executarà el constructor de la imatge que serà el mètode amb el mateix nom que la classe o en PHP5 el mètode anomenat _construct(), vegem un exemple:

000 <? Php
001 class Imatge{var $src  // Aquests són els atributs  
002 var  $border                  // dels objectes associats
003 // Aquesta funció és el constructor
004 function Imatge($src,$border) {$this->src=$src ;
005 $this -> border = $border  } } 
006 // Creem un objecte imatge 
007 $logo = new Imatge("logo.gif",3)  
008 ?>


També podem crear més mètodes a més del constructor, anem a completar l'exemple amb un mètode que imprimeixi la imatge al navegador del visitant:

000 <? Php
001 class  Imagen{
002 var $src ;
003 var $border ;
004 function  Imagen($src,$border) {$this->src=$src ;
005 $this -> border = $border  }
006 // This funció És Un Mètode d'Imatge
007 funció  Imprimir ( )  {
008 echo  "<img src = \" " ;
009 echo  $ this -> src ;
010 echo  frontera "\" = \ "" ;
011 echo  aquests $ -> frontera ;
012 echo  "\" > "  } }
013 $ logo  = new  Imatge ( "logo.gif" , 3 )  
 
014 // Cridem el Mètode nou
015 $ logo -> Imprimir ( ) ;
016 ?>


Pots veure com efectivament aquest exemple funciona
 i és un magnífic exemple de com ens pot simplificar una mica rutinari com la creació de múltiples imatges.

 

 

 

 

Herència de classes

Si resulta que hem creat una classe però que a més veiem que hi ha uns determinats objectes d'aquesta classe que comparteixen altres qualitats pel que volem englobar en una classe diferent, el que podem fer és posar-los en una subclasse, els objectes de la subclasse, mantindran tots els mètodes i atributs de la classe pare ia més compartiran els de la classe derivada. Anem a veure com podem definir una subclasse de la classe Imatge definida a la pàgina anterior per imatges de mida 468 x 60, aquesta subclasse es dirà Banner i serà de la següent manera:

000 <? Php
001 // Definim la subclasse de Banner
002 class  Bàner  extends  Imatge {
003 // Aquesta és la nova funció Imprimir per banners
004 function  Imprimir(){
005 echo "<img src= \"" ;
006 echo $this->src ;
007 echo "\"border=\"  
008 echo $this->border; " ;  
009 echo "\" width=\"468\" height=\ "60 \">" ; } }
010 ?>


I finalment crearem l'objecte $banner_1 i el imprimirem:

000 <? Php
001 $banner_1 = new  Banner("anunciant1.gif",0) ;
002 $banner_1 -> Imprimir( ) ; 
003 ?>


Tenir en compte que en el codi de la subclasse falta el codi de la classe Imatge, sinó no funcionarà. Veiem que no declarem constructor per banner, podem crear-li un constructor específic, però si no ho fem quan fem new Banner, anomenarem al constructor de la classe pare Imatge. Quan fem Imprimir() de l'objecte pertanyent a la base derivada Banner, es diu al mètode d'impressió de Banner i no al d'Imatge encara es diguin igual
 

 

 

 

Constructors i destructors

Si treballem amb PHP5, per definir un constructor, fem servir el mètode _construct, anem a veure un exemple:

000 <? Php
001 class  Imatge{
002 var $src ;         // Aquests són els atributs
003 var $border ;   // dels objectes associats
004 // Aquesta funció és el constructor
005 function _construct($src,$border) {
006 $this->src=$src ;
007 $this->border=$border ; } }
008 // Creem un objecte imatge 
009 $logo = new Imatge("logo.gif",3) ;
010 ?>


A més tenim l'opció de crear un destructor que s'executarà quan l'objecte serà eliminat de la memòria, el constructor es defineix amb el mètode _destruct.

 

 

 

 

Encapsulament

Aquest és un concepte nou en PHP5, l'encapsulament permet l'ús de variables i mètodes interns a un objecte que no poden ser accedits internament, d'aquesta manera hi ha tres tipus d'objectes:

public. Són accessibles des de tot el codi. 

protected. Són accessibles des de la classe actual i les classes derivades. 

private. Són accessibles des de la classe actual

Anem a veure l'exemple d'abans però amb atributs protegits:

000 <? Php
001 class Imatge {protected $src ;
  // Aquests són els atributs
002 private $border   // dels objectes associats
003 // Aquesta funció és el constructor
004 function_construct($src,$border) {<$this->src=$src;
005 $this->border = $border ; }}
006 // Creem un objecte imatge
007 $logo = new Imatge("logo.gif",3)  ;
008 ?>


I aquests són els canvis principals de PHP5, a més d'incorporar un constructor de còpia 

000 _clone


i algunes altres opcions