Introducció a les classes i objectes en php
   
   
  Un món classificat
   
  La percepció que tenim del món ve marcada per la classificació que fem dels elements que hi trobem. Així sabem que en el món hi ha milions d’arbres i, en lloc de designar-los individualment, el que fem és reconèixer-los de manera global donades les característiques que sabem que tenen. Si viatgem a un país exòtic i trobem una mena d’arbre que no haguem vist mai, no tindrem cap dubte en afirmar que allò és un arbre. Tenim una mena de “plantilla” mental que inclou les característiques i el que podem esperar d’unes coses que creixen de la terra, que tenen un tronc, que tenen unes branques i que tenen unes fulles; i sabem que d’això en diem “arbre”. Si, en canvi, allò que veiem no té un tronc sinó una tija, té pètals i colors més o menys vius i no té una alçada gaire considerable, sense dubtes direm que és una “flor”.

El mateix passa amb aquelles coses que ha creat l’home: tots som capaços de distingir una taula d’una cadira, encara que tinguin algunes coses en comú. Les taules poden tenir unes dimensions, un nombre de potes, pot ser plegable, etc., però la percebem com a això: una taula.

Un altre exemple d’objecte més complicat podria ser el d’un cotxe: té unes dimensions, una forma, un color, un tipus de motor, etc. I amb un cotxe podem fer coses diferents: girar, tocar el clàxon, accelerar, anar marxa enrere, etc.

Cada arbre, cada taula, cada cotxe és un element individual que comparteix característiques amb les altres individualitats.

Dels conjunts d’elements en podríem dir “classes” i de cada individualitat podríem dir que és un “objecte”

   
   
  Classes i objectes
   
 

Podem traspassar aquestes concepcions de què parlàvem, a la programació. Així trobem les classes i els objectes. Les classes seran una mena de “plantilla” que serveix per una finalitat concreta: crear xats, crear documents pdf, crear una calculadora, crear un formulari html, executar un fitxer d’àudio, etc. Salvant les distàncies estem parlant del mateix que els arbres, taules i cotxes de l’apartat anterior. I de la mateixa manera que en el cas del cotxe, per exemple, dins de cada classe hi haurà uns valors (variables o propietats) i possibilitats o coses que pot fer (funcions o mètodes).

El PHP, tot i que no és pròpiament un llenguatge orientat a objectes, sí que recull també la possibilitat de treballar amb classes i objectes.

Així, en php, cada classe tindrà unes variables (que es defineixen anteposant-hi var) i unes funcions internes que defineixen les possibilitats o mètodes que té la classe, és a dir, allò que la classe pot fer.

Els objectes seran cadascuna de les unitats, dels elements nous, que creem a partir de la classe. Podem crear, per exemple, un objecte “calculadora1” a partir de la classe “calculadora”. O podem crear un objecte “formulari1” a partir de la classe “formulari”. I cada objecte o element individual tindrà uns valors que podran ser diferents (per exemple, en el cas del formulari podrien ser el color de fons o el nombre d’inputs).

Una de les característiques de la programació orientada a objectes és la capacitat d'ampliar les caracterísitiques o possibilitats d'una classe mitjançant l'herència. Així, seguint l'exemple d'abans, a partir d'una classe que definís una calculadora, podríem fer-ne una ampliació cap a una nova classe que podria ser una "calculadora científica". Aquesta nova classe heretaria totes les característiques de l'anterior i, a més, n'ampliaria les possibilitats.

   
   
  Un exemple simple
   
 

Com a exemple, podem crear una classe molt simple que farà la feina de sumar dues xifres, definides ja dins de la classe.

   
 

<?
// Inici de la definició de la classe "Sumem"
class Sumem{
   //Definim les dues variables i els assignem un valor
   var $xifra1 = 4;
   var $xifra2 = 5;

   // Definim la funció, allò que pot fer la nostra classe
   // que simplement és sumar els valors ja definits
   function suma(){
      echo $this->xifra1+$this->xifra2;
   }
}
// Fi de la definició de la classe "Sumem"

//Utilització de la classe

// Definim un nou objecte de la classe
$objecte = new Sumem();

// Cridem la tasca definida com a "suma"
// que mostrarà el resultat de la suma
$objecte->suma();
?>

   
 

Com veieu, efectivament és molt simple i no té massa sentit pràctic, però es tracta només de veure el funcionament de la definició i ús de les classe i objectes.

Un cop tenim definida la classe la podem utilitzar, creant objectes nous, tantes vegades com vulguem.

El treball amb classes, comporta, d’una banda, una mica més de complicació en el codi; de l’altra aporta un avantatge: una vegada hem depurat la classe tenim la garantia que cada nou objecte funcionarà correctament i sense problemes.

   
   
  Les classes que utilitzem al D116
   
  Tota aquesta explicació, més que per aprofundir en les classes i objectes, ha de servir per entendre l’ús de les classes que apareixen en el curs i la seva sintaxi. No es tracta pas, doncs, de crear noves classes sinó de conèixer com les utilitzem. Seguidament en comentem algunes.
   
  La classe phpmailer
 

Al mòdul 3, pràctica 2 es parla de la realització, de manera opcional, del procés de tramesa de correu mitjançant un formulari i la classe phpmailer. Tal com s'explica, aquesta classe ens permet enviar correu autentificant-nos en un servidor smtp.

Iniciem un nou objecte que tindrà per nom $mail amb:

  $mail = new phpmailer();
   
  I a partir d'aquí es van definint les propietats o característiques que tindrà aquest nou objecte, per exemple:
  $mail->Mailer = "smtp";
  indica que la connexió serà per mitjà d'un servidor smtp
   
 

O bé amb:

  $mail->Host = "smtp.xtec.cat";
  li indiquem quin és el nom (host) del servidor smtp
   
   
  La biblioteca ADODB
 

En concret, en el mòdul 5 utilitzem la biblioteca ADODB que utilitza les classes. Com a curiositat, si observeu el fitxer adodb.inc.php veureu que hi ha definides les classes seguint la sintaxi que hem comentat en el nostre exemple anterior.

Quan en el codi de les pràctiques definim, per exemple, al llistat 5.4.3:

  $pager1 = new ADODB_Pager($ConTut,$sql);
  estem creant un nou objecte de paginació automàtica de les dades, al qual li passem com a paràmetres la connexió que ja tenim oberta (un objecte de la classe connexió) i una consulta.

Després donem valors a algunes de les variables definides en la classe:
  ...
$pager1->linkSelectedColor = "red";
$pager1->htmlSpecialChars = True;
...
   
  Ja veieu que marquem la dependència amb ->. És a dir :
  $objecte = new Classe;
$objecte->variabledeclasse = algunacosa;
$objecte->funciódeclasse(paràmetres);
   
  Finalment utilitzem una funció interna de la classe, Render(), que serveix per mostrar l’objecte de paginació en pantalla:
  $pager1->Render($rows=4);
   
  De la mateixa manera, quan establim una connexió a una base de dades, estem creant un objecte al qual, a les pràctiques, donem el nom de
  $ConTut
   
  Una de les coses que poden fer els “objectes” de connexió és executar consultes SQL mitjançant la funció Execute().
  $RS =$ConTut->Execute($sql)or DIE($ConTut->ErrorMsg()) ;
   
  Amb això es crea un nou objecte Recordset ($RS) que tindrà noves possibilitats. Per exemple amb
  $RS->Close();
  tancarem el recordset o resultat de la consulta.
   
  Biblioteca FPDF
  A la pràctica 3 del mòdul 7 utilitzem també una classe per generar documents pdf: FPDF. El fitxer on hi ha definides les classes s'anomena fpdf.php.

En aquest cas podríem generar un nou document que contingués únicament la frase “Hola a tothom!” de la següent manera:
   
 

<?php
// definim path per a les fonts
define('FPDF_FONTPATH','font/');
//carreguem la defincició de la classe
require('fpdf.php');

// Creem nou objecte de document pdf
$pdf=new FPDF();
$pdf->Open(); // l’obrim
$pdf->AddPage(); // afegim pàgina nova
$pdf->SetFont('Arial','B',16); // definim font
$pdf->Cell(40,10,'Hola a tothom!'); //”escrivim” text
$pdf->Output(); //sortida del document per pantalla
?>

   
 

A l'exemple del mòdul 7, a més, podeu veure com, partint de la classe definida, en creem una de nova. És a dir, que en podem fer una extensió per tal de fer-la més completa o més propera als nostres interessos:

  class PDF extends FPDF
  D'aquesta manera creem una nova classe anomenada pdf que parteix de la definició de la classe original fpdf i a la qual li afegirem les característiques que ens interessin.
   
   
  Una mica més d'informació
   
 

Podeu trobar moltes fonts d'informació per completar i ampliar el que hem explicat en aquesta introducció. Per posar-ne dos exemples:

   
  On trobar classes?
   
 

Podeu veure i provar una gran quantitat de classes a internet, especialment a la pàgina http://www.phpclasses.org

Hi podreu trobar una considerable quantitat i diversitat de classes classificades per temes.

   
 
Amunt