Documente Academic
Documente Profesional
Documente Cultură
Variabilele variabilelor:
$a = ”b”;
$$a = “c”;
Atunci
$$a = $b = “c”
Functii variabile:
$a = ”arata”;
$a() = arata();
Clase variabile:
$clasa = ”Foo”;
$obiect = new $clasa();
Adica $obiect = new Foo();
$this->
Introduce o proprietate intro metod sau o metoda intro alta metoda
Operatorul de rezolutie ::
Ne permite sa accesam:
- metodele si prorprietatile statice
- metodele si proprietatile suprascrise prin self :: sau parent ::
- constantele clasei self :: sau ale parintelui parent ::
- constructorul clasei parinte
O clasa poate mosteni metode si proprietati ale altei clase prin utilizarea cuvantului
extends. Metodele si prorprietatile din clasa extinsa pot suprascrie metodele si
proprietatile din clasa de baza prin declararea lor cu acelasi nume. Daca totusi o clasa de
baza are o metoda marcata ca final aceasta nu poate fi suprascrisa in clasa care o
mosteneste.
Daca o clasa e definite cu cuvantul final atunci acesta nu poate fi extinsa.
Constentele definite in clasele copil vor suprascrie constentle din clasa de baza.
Proprietatile nonstatice sunt accesate cu ->
Proprietatile statice sunt accesate cu ::
Functii __autoload
function __autoload($class_name)
{ include $class_name.’.php’;}
In cazul in care utilizam clase care nu au fost definite in fisierul curent functia __autoload
va incarca toate fisierele pe care la gaseste in folderul curent iar in fisierele respective va
cauta clasa cu numele fisierului.’.php’ si le va incarca ; de aceea e util sa denumim clasa
din interiorul unui fisier la fel ca fisierul.
Daca numele clasei difera de numele fisierului sau fisierul se gaseste intr-un subfolder
atunci putem defni o functie autoloader:
Function autoloader($classname)
{
$directoare = array(‘’,’folder/’) ;
$format = array(‘%s.php’,’%s.class.php’);
foreach($directoare as $dir)
{foreach($format as $form)
{
$path = $dir.sprintf($form, $classname);
if(file_exists($path))
{include_once $path;
return;
}
}
}
}
spl_autoload_register(‘autoloader’);
Daca nu este definit _autoload atunci clasele trebuie definite inainte de a fi utilizate si
functiile de baza inainte de functiile care la mostenesc.
__construct()
- daca clasa copil are un constructor atunci acesta este chemat
- daca clasa copil nu are un constructor definit atunci constructorul clasei parinte e
chemat automat
- daca o clasa are constructor dar mosteneste si pe cel al clasei de baza atunci ambii pot fi
chemati astfel :
self ::__construct()
parent ::__construct()
Daca o clasa nu a gasit un constructor si nu mosteneste unul de la clasa de baza atunci va
cauta un constructor pe metoda veche(dupa numele clasei).
__destructor
Metoda destructor va fi chemata de indata ce nu exista alti referenti catre un anumit
obiect sau in oricare alta situatie in timpul secventei de oprire.
Modul de definire al destructorului e asemanator constructorului.
var = public
Proprietatile suprascrise trebuie sa aiba vizibilitate egala sau mai mare in clasele copil.
-> CONSTANTA
-> VARIABILA -> STATICE -> PUBLICE
-> PRIVATE
->PROTEJATE
->NONSTATICE ->PUBLICE
->PRIVATE
->PROTEJATE
Proprietatile declarate statice nu pot fi accesate cu un obiect instantiat al unei clase (ele
sunt pur si simplu accesibile) Ele sunt accesibile prin operatorul de domeniu.
Clase abstracte
Orice clasa care are cel putin o metoda abstracta este deasemnea abstracta.
Cand mostenim de la o clasa abstracta toate metodele marcate ca abstracte in declaratia
clasei parintilor trebuie deinit si de copil; additional aceste metoda trebuie sa fie definite
cu aceeasi vizibilitate sau mai mare.
Semnatura acestor metoida trebuie sa fie la fel, tipul indicilor si numarul argumentelor
necesare trebuie sa fie la fel.
Copilul care mosteneste o clasa abstracta poate utliza argumente optionale, care nu erau
in definitia parintelui. Dar argumentul trebuie sa fie definit cand e trecut ca parametru iar
valoare nu se poate modifica.
class baza
{ public function afla($a){}}
Interfata
Interfatele sunt definite ca o clasa standard dara fara a defini continutul vreunei metode.
Toate metodele declarate intro interfata trebuie sa fie publice , aceasta e natura unei
interfete.
Interfete se implementeaza cu implements.
Toate metodele din interefte trebuie implementate si in interiorul claselor care o
implementeaza.
O clasa nu poate implementa doua interfate care specifica o metoda cu acelasi nume.
Interfetele pot fi extinse cu extends.
Abstract Interfete
Mostenire multipla dar singulara Mostenire multipla si multinivel:
- O clasa poate implementa mai multe
interfete separate prin virgula.
- O interfata poate mosteni mai multe
interfete.
Nu toate metodele trebuie sa fie abstracte Fiecare metodda e abstracta
Metodele sunt publice sau protejate Metodele sunt publice
Metodele pot fi definite si/sau declarate Metodele sunt doar definite
Daca utilizam doua trasaturi care insereaza o metoda cu acelasi nume vom folosi:
use A,B{
A::small insteadof B;
B::big insteadof A;
B::small as excellent;
}
Trasaturile :
- pot defini metode statioce
- nu pot defini variabile statice
- pot defini variabile nonstatice
Putem introduce metode abstracte in trasaturi astfel incat ele vor fi fortate in clasele in
care sunt utilizate.
Overloading
__set(strng $name, mixed $value) {ruleaza cand scriem date in proprietati inexistente}
__get(string $name) {ruleaza date cand citim date din proprietati inexistente}
__isset(string $name) {ruleaza cand chemam isset() sau empty() pe proprietati
inexistente}
__unset(string $name) {ruleaza cand chemam unset() pe proprietati inaccesibile}
Iteration
Pentru a itera prin elementele unei clase. Pentru a afisa toate elementele clasei trebuie sa
pozitionam aceasta functie in interiorul clasei.
class unu
{
Public $a = “2”;
Private $b = “3”;
Protected $c = “4”;
Function doi(
foreach($this as $key=>$value)
{echo “$key => $value”}
}
$obj = $obj1
Dam posibilitatea lui $obj1 sa foloseasca metodele si proprietatile lui $obj insa nu sunt
proprii ale lui $obj1.
Compararea obiectelor
Cand folosim obietul de comparare (==) variabilele obiectelor sunt comparate intr-un
mod simplu adica : doua instantieri ale obiectelor sunt egale daca au aceleasi atribute si
valori si sunt instantieri ale aceleeasi clase.
Pe de alta parte cand folosim operatorul de identitate (===) valorile variabilelor sunt
identice daca si numai daca fac referire catre aceeasi instatiere a aceleasi clase.
Type hinting
Functiile pot forta parametrii sa fie :
- obiecte
- interfete
- matrici
- callabel
Type hinting nu pot fiutilizati cu tipuri scalare precum int, sting, resources si trasaturi
FATADA PATERN
Chemam toate functiile dintro clasa in constructor iar constructorul il chemam in
instatierea obiectului.
Namespace este un indicator catre o cale spe un fisier unde veti gasi sursa functiilor cu
care lucrezi.
Desi orice cod valid se poate gasi in namespace doar 4 tipuri de valori sunt afectate de
namespace: clase, interfete, functii, constante.
Singurul cod permis a fi declarat inainte de namespace pe o pagina este declare – ptr a
defini encoding din fisierul sursa.
Pe o pagina putem declara un namespace sau mai multe
< ?php
namespace project
Const A = 200 ;
Class connect ;
?>
< ?php
namespace project
Const A = 200 ;
Class connect ;
namespace project2
Const B = 400 ;
Class connection ;
?>
Cuvantul use trebuie sa fie declarat in partea ceam mai exterioara a fisierului (domeniul
global) asu inauntrul declaratiei namespace. Asta deoarece importarea se realizeaza in
momentul compilarii si nu a rularii, asadar nu poate fi un bloc de domeniu.
Prefatarea unui namespace cu \ va specifica ca numele este necesar din spatial global
chiar si in contextual unui naespace.
if(conditie)
{
throw new Exception(‘mesaj’)
}
try{
o anumita functie
}catch(Exception $e){
echo “caugth”.$e->getMessage()
}finaly{
se va executa chiar daca nu apare o exceptie;
}
Referenti
Cand trecem ca referent un parametru folosim & doar cand il trecem ca argument.
Cand trecem ca referent o functie punem & atat inainte de definitia functie cat si cand o
folosim inainte ei.
unset rupe legatura intre refernti insa valorile pana aici se pastreaza.
Proprietati:
Message – mesajul;
Code – codul executie
File – Numele fisierului unde excetia a fost create
Line – Linia unde exceptia a fost creata.
Metode:
Exception::__construct
Exception::__getMessage - mesajul
Exception::__getPrevious
Exception::__getCode
Exception::__getFile -calea fisierului
Exception::__getLine - linia
Exception::__getTrace -matricea cu toate datele exceptiei
Exception::__getTraceAsString - string cu toate datele exceptiei
Exception::__toString
Exception::__clone