Menu

Introducere OOP in PHP

1. Introducere

Pentru a intelege scopul in care vei utiliza Programarea Orientata pe Obiecte(Object Oriented Programming in engleza) imagineaza-ti o cutie, in acea cutie sunt variabile si functii cu un scop asemanator, cu o legatura stransa. Folosim OOP pentru a stabilii o structura mai buna aplicatiilor noastre.
Un alt avantaj al OOP este ca nu mai este nevoie sa folosim global pentru a face variabile globale in functii, le vom apela pe cele ale clasei cu $this->nume_variabila
Sa dam exemplu unui blog cu sistem de utilizatori si cu comentarii, putem avea urmatoarele clase:
  • O clasa care se ocupa de Useri, cu functii specifice pentru logare, inregistrare s.a.m.d.
  • O clasa pentru paginare, care va pagina articolele
  • O clasa pentru comentarii, cu functii specifice comentariilor
  • O clasa pentru MySQL, pentru a securiza query-urile mysql si a oferii functii specifice MySQL pentru terminarea mai rapida a proiectului
Cred ca ati prins ideea. Intr-o clasa putem avea functii(numite metode pentru a face diferenta dintre functiile simple si functiile dintr-o clasa), putem avea variabile(numite proprietati pentru a face diferenta dintre variabilele simple si variabilele dintr-o clasa).
Un exemplu de obiect este MySQLi, cand lucrati cu baze de date si le manilpulati cu obiectul facut din clasa mysqli.
Functiile si metodele pot fi:
  • public - valabila oriunde
  • private - valabila doar in clasa respectiva
  • protected - valabila in clasa respectiva si in clasele facute din ea

1.1 Ce este o clasa?

O clasa este o structura cu functii si variabile predefinte.

1.2 Ce este un obiect?

Un obiect este o instanta a clasei, o forma a ei.

1.3 Clasa si obiecte

Dintr-o clasa putem crea obiecte nelimitate. Toate obiectele pornesc cu functiile si variabilele predefinite din clasa, pe parcurs obiectele pot fi modificate. O clasa este ca un parinte al obiectelor, obiectele pornesc din start la fel ca clasa dar pe parcurs le putem modifica.

2. Practica

Dupa atata teorie este necesar sa si practicam, altfel nu o sa tinem minte nimic.

2.1 Creare clasa

O clasa o cream asemanator unei functii, doar ca avem doua diferente. In loc de function folosim class si nu folosim paranteze.
Se recomanda ca clasele sa fie salvate in fisiere cu numele asemanator lor si intr-un director specific doar pentru clase, pentru o mai buna organizare. Numele fisierului trebuie sa fie de forma class.nume_clasa.php
Noi in exemplul urmator vom crea o clasa cu numele exemplu, o vom salva in directorul specific claselor si anume clase iar fisierul se va numii class.exemplu.php

Cod class.exemplu.php:
<?php  
# fisier: clase/class.exemplu.php

// Cream clasa cu numele exemplu
class exemplu{
	# Acesta este interiorul clasei
	# Aici putem declara metode(functii) si proprietati(variabile)
}
?>

2.2 Proprietati, metode si obiecte

In exemplul anterior am creat o clasa goala iar acum vei invata sa creezi si metode si proprietati in clase. In exemplul urmator vom crea clasa exemplu(exact clasa creata mai devreme) dar in interiorul ei vom declara si proprietatea(variabila) publica cu numele site si functia publica cu numele limbaj.
Nu uita:
  • Creaza directorul cu numele clase in caz ca nu exista deja
  • In director clase vei introduce fisierul class.exemplu.php cu codul specific de mai jos
  • In directorul cu un director mai sus decat clase vom crea fisierul test-clasa.php

Cod /clase/class.exemplu.php
<?php  
# fisier: /clase/class.exemplu.php

// Cream clasa cu numele exemplu
class exemplu{
	public $site = 'Programam.Ro';

	public function limbaj(){
		echo 'Imi place limbajul <b>PHP</b><br/>';
	}
}
?>
	
Cod /test-clasa.php:
<?php 
# fisier: /test-clasa.php

// Includem fisierul cu clasa
include 'clase/class.exemplu.php';

// Cream o instanta a clasei
$obiect = new exemplu; 

# Observati cum este apelata o variabila, fara semnul $
echo 'Variabila <b>$site</b> din clasa <b>exemplu</b> are valoarea <u>'.$obiect->site.'</u><br/><br/>';

# Apelam functia limbaj din instanta $obiect a clasei exemplu
$obiect->limbaj();
?>
Obserati ca numele variabilelei se apeleaza fara semnul $, deci daca aveam variabila site o apelam cu $obiect->site si nu cu $obiect->$site. Instanta clasei(obiectul) si variabilele/functiile sunt despartite cu ajutorul -> un minus si semnul >
Output /test-clasa.php:


Noi am folosit in acest exemplu doar proprietati si metode publice, daca una ar fi privata iar noi am apela-o cu ajutorul instantei(obiectului) ar genera o eroare asemanatoare cu:
Fatal error: Cannot access private property exemplu::$site
Proprietatile private apartin doar clasei, nu si obiectului.

3. Metoda Constructor

Programarea orientata pe obiecte mai are si un avantaj, metodele magice. Metoda constructor este o metoda magica care se apeleaza odata ce instanta clasei este creata.
Cum cream metoda constructor? Pai cream o metoda(functie) in interiorul clasei cu numele __construct(doua caractere _) iar aceea este metoda constructor care va fi apelata odata ce este creata o instanta a clasei. Metoda constructor mai are un avantaj, si anume ca putem adauga parametrii la o clasa. Clasa va fi apelata ca o functie doar ca cu new in fata iar dupa numele ei vor venii paranteze in care vor fi parametrii. De mentionat ca metoda constructor este intotdeauna publica. Mai jos veti vedea un exemplu in care cream o clasa care are metoda constructor si este apelata cu un parametru(poate avea oricati parametrii, chiar si unul) iar noi cream doua obiecte din acea clasa.

Cod /clase/class.exemplu.php:
<?php  
# fisier: clase/class.exemplu.php

// Cream clasa cu numele exemplu
class exemplu{

	function __construct($nume){
		echo "<br/>A fost creata o noua instanta cu parametru <b>$nume</b> cu valoarea <u>{$nume}</u><br/>";
	}

}
?>

Cod /test-clasa.php:
<?php 
# fisier: /test-clasa.php

// Includem fisierul cu clasa
include 'clase/class.exemplu.php';

// Cream o instanta a clasei
$obiect = new exemplu('Programam');

$obiect2 = new exemplu('OOP'); 
?>
Output:

4. Metoda Destructor

O alta metoda magica este metoda destructor, ea este apelata cand obiectul este distrus(la incheierea executiei scriptului sau din script cu functia unset). Metoda este asemanatoare ca nume cu metoda constructor deoarece numele metodei trebuie sa fie __destruct(cu doua caractere _).In exemplul urmator vom crea doua obiecte, unul il vom distruge cu unset iar altul il vom lasa sa fie distrus cand scriptul isi incheie executia.

Cod /clase/class.exemplu.php:
<?php  
# fisier: /clase/class.exemplu.php

// Cream clasa cu numele exemplu
class exemplu{

	function __construct($nume){
		$this->nume = $nume; // salvam variabila in clasa
		echo "<br/>A fost creata o noua instanta a clasei cu parametru <b>$nume</b> cu valoarea <u>{$nume}</u><br/>";
	}

	function __destruct(){
		echo "<br/>Obiectul deschis cu parametru <b>{$this->nume}</b> a fost distrus.<br/>";
	}

}
?>
Observati ca proprietatile clasei la apelam cu $this->proprietate, la fel si functiile.

Cod /test-clasa.php:
<?php 
# fisier: /test-clasa.php

// Includem fisierul cu clasa
include 'clase/class.exemplu.php';

// Cream o instanta a clasei
$obiect = new exemplu('Distrus de noi');

// Cream alt obiect
$obiect2 = new exemplu('OOP'); 

unset($obiect); // distrugem primul obiect creat

echo '<hr/>Dupa se termina executia scriptului.<hr/>';
?>
Output /test-clasa.php:



Ti-a placut articolul? Asigura-te ca-ti dam de veste cand publicam altele noi.


Tags: Tutoriale, Programare Web, Php, Curs Php

Comments Nota 5 din 2