Sunteți pe pagina 1din 11

highlight_string(‘ text ’) – pentru a schimba color in blue

copy($unu , $ doi) – copiem informatiile din primul fisier in al doilea


include “../director/fisier.php ” – ptr a iesi din director
include “../../director/fisier.php” – pentru a sari doua nivele din fisierul in care ne aflam;
fisier.php - fisierul in crae mergem nu cel in care ne aflam
include ‘fisier.txt’ – putem include orice tip de fisier inclusive txt
is_dir() – este director?
is_file() – este fisier?
file_exist – exista ?
foreach(glob($dir ."*.jpg*") as $file) – deschide toate fisierele de
tip jpg

get_class() – aflam clasa in care se gaseste parametrul

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 ::

Constantele pot fi definite


define (“CONSTANTA”,’o constanta’) sau
const CONSTANTA = ‘o constanta’

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’);

include ‘autoloader.php’ - in fisierul in care avem nevoie

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 private si protejate nu pot fi utilizate decat prin intermediul fucntiilor


definite public.

Proprietatile suprascrise trebuie sa aiba vizibilitate egala sau mai mare in clasele copil.

Cand declaram o valoare trebuie incadrata undeva in schema :

-> 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){}}

class copil extends baza{


public function afla($a, $b=1){}}

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

Este posibil ca interfetel sa aibe constante dar aceste nu pot fi suprascrise.


Trasaturi
Membrii din clasa curenta suprascriu metodele trastaurii care in schimb suprascriu
metodele mostenite.Mostenirea limiteaza clasele la mosteniri unice.
Trasaturile ofera utilizari multiple.

Pentru a implementa o interfata utilizam :


use hello;

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;
}

Cu as putem modificavizibilitatea metodei si numele metodei.

use A { small as protected;}


use A { small as protected big;}

O interfata poate fi compusa din mai multe interfete prin: extends .


O trasatura poate fi compusa din mai multe trasaturi prin use.

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.

Proprietatile din trasaturi cu acelasi nume in casa ce le utilizeaza dau eroare.


Metodele din trasaturi cu acelasi nume in clasa ce le utilizeaza sunt suprascrise.

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}

$name = numele prorprietatii


mixed $value = valoarea pe care trebuie sa o aibe
Aceste metode nu trebuie definite in contexte statice, deoarece supraincarcarea
proprietatii functioneaza numai in contextual obiectului.

__call este lansat cand invocam meode inaccesibile in contextual obiectului


__callStatic este lansat cand invocam metode inaccesibile in context static.

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”}
}

__sleep() – executa cursul de date sau realizeaza sarcini de curatare


__wakeup() – restabileste conexiunea cu baza de date
__toString() – ruleaza cand un obiect e tratat ca un string
__invoke() – ruleaza cand un obiect e chemat ca o functie

serialize(string) –codifica un string ptr a putea fi salvat in baza de date


unserialize(string) – decodifica stringul codificat cu serialize
Utile pentru matrici.
Daca rulam session_register trebuie sa inludem fisierul in care se gaseste clasa pe toate
paginile unde lucram cu variabila serializata altfel.

$obj = new Class - creeaza un obiect


$obj1 = clone $obj - creeaza o clona a unui obiect

$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

Function unu(OtherClass $obj)


Function unu(array $input)
Function unu(traversable $iterator)

Type hinting nu pot fiutilizati cu tipuri scalare precum int, sting, resources si trasaturi

__CLASS__ afiseaza clasa in care se gaseste aceasta constanta magica


__METHOD__
__FUNCTION__
__NAMESPACE__

Atunci cand folosim self:: in clasa de baza avem o limitare:

self:: directioneaza functiile din clasele extinse catre clasa de baza


static:: functiile extinse vor folosi functiile sau proprietatile statcice din priopria clasa, nu
din clasa de baza.

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 ;
?>

Sau mai multe

< ?php
namespace project
Const A = 200 ;
Class connect ;

namespace project2
Const B = 400 ;
Class connection ;

?>

E similar cu a incarca doua pagini fiecare cu namespaceul lui.

Namespace poate fi declarat cu :


- numele de fisiere relativ: currentdirector/foo.txt
- numele de cai relative: subdirectory/foo.txt
- numele absolute: /main/foo.txt

Pentru a utilize un namespace utilizam cuvantul use

utilizam doua namespace diferite, unul sub alt nume


use namespace1 as ya, namespace2

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.

new stdClass – accesam clasa globala

Nu sunt premise namespace cuibarite.


Use se utilizeaza doar pentru namespace si clase.
Exceptii

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;
}

Putem afisa si asa.(cu virgule in loc de concatenetion):

echo $a,” text si text”,$b;

Exceptiilr nu pot fi clonate.

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.

Pentru a deseta un referent folsim unset():


$a = 1;
$b = &$a;
unset($a);

unset rupe legatura intre refernti insa valorile pana aici se pastreaza.

$HTTP_RAW_POST_DATA – contine datele postate raw:


Pentru a accesa datele postate cu $_POST[] chemam functia:
$POSTDATA = file_get_contents(“php://input”);
$POSTDATA = este un string ce contine variabilele si le putem transforma intro matrice
care sa aratae astfel:

$_POST = array (“key1”=>”value1”,”key2”=>”value2”);

Clasa standard EXCEPTION contine;

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

Tips and triks


1.Utilizati error_reporting:E_ALL in faza de proiectare pentru a elimina toate erorile
2. Atat metodele cat si prorpietatile protejate si private notate incepand cu _ astfel devin
mai vizibile: private $_element
3. private folosim cand vrem sa ascundem prop si metode de utilizatori
4. protected folosim in aceleasi conditii dar damk posibilitatea de a fi extinse de alte clase
5. polimorfism = extends (mostenire)
6. notatii camel-case: setValue() - pentru vizibilitate
7 .notati cuvintele lungi cu _ : set_value_to_new_function()
8. pune fiecare clas ain fisierul ei
9. Inlantuirea metodelor:
$obj = mew class;
$ovj->metode1->metode2->metoda3;
function(){return THIS;}
10. Salveaza fieacre valoare inntr-o variabila si introdu variabila in functii simple sau
complexe.
11. utilizeaza unset($a) pentru a eliberare memoria dupa ce nu mai folosesti variabila. La
fel si in cazul mysql : free_results()
12. Nu amesteca fisiere php , html, css si javascript in acelasi fisier
13. fa o schita a proiectului inaninte de a-l compune
14. Utilizati functiile built in
15. protejati baza de date: mysql_real_escape_string , folositi POST si GET nu
REQUEST, toate datele trebuie sa fie de for a si valoarea corecta inainte de a submite.
16. creeaza cod stand alone (adica care functioneaza de unul singur)
17. o clasa trebuie sa faca un singur lucru, e mai usor sac hemi functiile claselor din
obiecte decat din interiorul altor clase

S-ar putea să vă placă și