Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Expresii. Operatori

Expresii in PHP    0 ! 

Expresiile sunt constructii ale limbajului PHP care au o valoare. O expresie poate fi un sir de caractere, un numar, o variabila sau chiar o constructie mai complexa (cum ar fi un apel de functie). Ideea de baza este ca orice poate fi evaluat la o valoare este considerat a fi expresie.

Limbajul PHP este construit in jurul expresiilor, iar acest concept, desi ignorat de multi programatori, este foarte important in intelegerea corecta a modului in care interpretorul PHP evalueaza si executa secventele de cod.

Cele mai simple expresii in PHP sunt, asa cum am amintit, numerele (denumite si number literals) sau sirurile de caractere (string literals). Acestea au o valoare ce poate fi determinata in orice moment, iar aceasta valoare poate fi folosita in operatii (cel mai adesea, la atribuiri). In urma unei atribuiri, o variabila va prelua valoarea expresiei atribuite, devenind ea insasi o expresie. Asadar, avand o instructiune de atribuire de forma

$a = 1;
1 este o expresie (number literal) si $a este la randul ei o expresie (variabila).

Mai mult decat atat, in PHP instructiunea de atribuire este in sine o expresie, in sensul ca returneaza o valoare; astfel $a = 1 va returna valoarea expresiei atribuite (1, in acest exemplu). In acest context, putem scrie

// atribuie lui $a valoarea 1, apoi printeaza rezultatul expresiei $a = 1, adica 1
print ($a = 1);

Sau chiar

// atribuie lui $a valoarea 1, apoi atribuie lui $b rezultatul expresiei, adica 1
$b = ($a = 1);

De mentionat este ca expresiile sunt evaluate de la dreapta la stanga. In exemplul de mai sus, mai intai se executa si evalueaza expresia $a = 1 iar apoi se executa atribuirea $b = ... in care operandul din dreapta este inlocuit cu valoarea efectiva obtinuta.

Nu doar atribuirile sunt expresii. Apelurile de functii (predefinite sau definite de programator) sunt considerate expresii si ele, intrucat returneaza o valoare. De asemenea, asocierea mai multor expresii, folosind operatori, genereaza o noua expresie.

Un alt lucru important referitor la expresii este ca valoarea lor se poate modifica in functie de context. Mai exact, se modifica tipul de date de care apartine expresia (din string in numeric, din numeric in logic, etc). Astfel, daca intr-o operatie este necesar un anumit tip de date, iar expresia folosita are alt tip, atunci valoarea este convertita in mod automat. Asta poate fi un lucru bun, sau poate introduce erori in cod; de aceea este important sa se acorde o atentie sporita valorilor expresiilor, in special atunci cand se combina tipuri de date diferite.

Expresiile sunt fundamentul limbajului PHP si aproape orice este o expresie. Ele apar peste tot in codul sursa si pot fi folosite in atribuiri, ca parametrii ai functiilor sau pentru specificarea conditiilor din structurile de control. In cele ce urmeaza vor fi prezentati operatorii limbajului PHP care pot fi aplicati unor expresii si care genereaza (prin compunere) noi expresii.

Nimic de afisat.


Adauga un comentariu la aceasta sectiune.

 


Operatori in PHP    9 ! 

Operatorii sunt elemente de limbaj ce se aplica expresiilor si dau nastere unor noi expresii. Exista mai multe tipuri de operatori, cu sintaxa si roluri diferite. De retinut este ca toti operatorii vor determina conversia expresiilor componente atunci cand acestea au tipuri diferite de date. Regula de conversie difera de la un tip de date la altul si de la un operator la altul.

Mai jos sunt detaliati operatorii disponibili in PHP.


Operatori de comparare

Operatorii de comparare sunt folositi de cele mai multe ori in cadrul instructiunii if pentru a exprima conditia ce trebuie verificata.

$a == $b // egal
$a === $b // identic (aceeasi valoare si acelasi tip) 
 
$a != $b // diferit
$a <> $b // diferit
$a !== $b // ne-identic
 
$a < $b // strict mai mic
$a <= $b // mai mic sau egal
 
$a > $b // strict mai mare
$a >= $b // mai mare sau egal
Exemple:
<?php
#initializari
$a = 4; # initializam $a cu numarul 4
$b = "4"; # initializam $b cu string-ul "4"
 
# operatorul de egalitate
if( $a == 4 ) print "\$a este 4";   # va afisa "$a este 4"
else print "\$a nu este 4";
 
# operatorul de egalitate
if( $a == $b ) print "Sunt egale";  # va afisa "Sunt egale"
else print "Nu sunt egale";
 
# operatorul de echivalenta
if( $a === $b ) print "Sunt identice";  # va afisa "Nu sunt identice"
else print "Nu sunt identice";
# Nota: deoarece $a este numar iar $b string, ele nu sunt identice
 
# operatorul de comparare
if( $a > 4 ) print "\$a este mai mare decat 4";
?>
Atentie! Daca se compara un string (text) cu un numar, stringul este convertit la un numar. Exemplu:
"text" == 0 // echivalent 0 == 0, evalueaza la true

Daca se compara 2 stringuri ce contin numere, acestea sunt mai intai convertite la numerele pe care le reprezinta si apoi are loc comparatia. Astfel, 2 texte care sunt diferite ar putea fi considerate egale. Exemplu:

"1" == "01" // echivalent 1 == 1, evalueaza la true
"1" == "1e0" // echivalent 1 == 1, evalueaza la true
Nota: "01" si "1e0" sunt notatii matematice diferite pentru numarul 1.

Diferenta intre operatorii == si =
Operatorul == este diferit de operatorul de atribuire = si nu trebuie confundati. Dublu-egal (==) este folosit pentru comparare iar egal simplu (=) - pentru atribuirea de valori unei variabile.

# $a = 5 este o atribuire.
var_dump( $a = 5 ); // 5
# instructiunea print afiseaza rezultatul atribuirii (rezultatul unei atribuiri este 
# intotdeauna egal cu valoarea atribuita)
 
# $a == 1 este o verificare. Instructiunea afiseaza rezultatul verificarii.
var_dump( $a == 1 ); // false

In timp ce atribuirile se pot folosi atat de sine statator ($a = 1;), cat si ca expresii in cadrul instructiunilor (print $a = 1; return $a = 1;) operatorii == sau === sunt folositi doar in cadrul instructiunilor.

# corect
$a = 10; # atribuire de sine statatoare
var_dump( $a = 10 ); # atribuire + afisarea rezultatului atribuirii
 
# incorect - nu genereaza erori dar aceasta constructie este inutila.
$a == 1; # nu se face nimic cu rezultatul comparatiei
 
# corect
var_dump( $a == 1 ); # se afiseaza rezultatul comparatiei
var_dump( $a === '1' ); # se afiseaza rezultatul comparatiei exacte
if( $a == 1 ) echo 'egal'; # se face o verificare

Operatorul ternar

PHP ofera un operator care are 3 termeni si a carui evaluare returneaza o valoare. Sintaxa lui este urmatoarea:

(conditie ? adevarat : fals )

De remarcat ca adevarat, fals si conditie nu sunt instructiuni ci expresii (variabile, constante, stringuri, etc) iar operatorul returneaza o valoare si nu o variabila.

print ( 1 == 2 ? 'egal' : 'ne-egal' ); // afiseaza ne-egal
$a = ( 1 == 2 ? 'egal' : 'ne-egal' ); // $a va avea valoarea ne-egal

Operatori de incrementare/decrementare

Incrementare inseamna cresterea valorii, de obicei cu o unitate, iar decrementarea este operatia inversa. PHP ofera (ca si C/C++) posibilitatea ca incrementarea/decrementarea sa se faca printr-un operator, fara sa fie nevoie de o instructiune separata. Spre exemplu:

$a = 1; // initializare
 
// pentru a-l creste pe $a cu o unitate, normal am scrie:
$a = $a + 1;
 
// folosind operatorul de incrementare scriem:
$a++;
// sau
++$a;
 
// pentru a afisa noua valoare, putem aplica operatorul direct din instructiunea print:
print ++$a;

Dupa cum se poate observa, putem scrie $a++ si ++$a. Diferenta este ca atunci cand ++ apare inainte de variabila, PHP face mai intai incrementarea si apoi returneaza noua valoare. Cand ++ apare dupa, se returneaza valoarea actuala (ne-incrementata) si apoi se creste cu o unitate. Exemplu:

$a = 1;
print $a++; // afiseaza 1 - mai intai se afiseaza valoarea curenta, dupa care $a devine 2;
print $a; // afiseaza 2 - $a are valoarea 2 dupa incrementare;
 
$a = 1
print ++$a; // afiseaza 2 - mai intai $a creste cu o unitate, apoi este afisata noua valoare
print $a; // afiseaza 2 - $a are valoarea 2;

Nota: aceleasi observatii (legate de pozitie) se aplica si pentru operatorul de decrementare.

$a = 2;
print $a--; // afiseaza 2 - mai intai se afiseaza valoarea curenta, dupa care $a devine 1;
print $a; // afiseaza 1 - $a are valoarea 1 dupa decrementare;
 
$a = 2
print --$a; // afiseaza 1 - mai intai $a scade cu o unitate, apoi este afisata noua valoare
print $a; // afiseaza 1 - $a are valoarea 1;

Operatori de atribuire

$a = 1; // atribuire simpla
 
$a += 4; // echivalent cu $a = $a + 4; $a are valoarea 5 acum
$a -= 1; // echivalent cu $a = $a - 1;
$a *= 2; // echivalent cu $a = $a * 2;
$a /= 3; // echivalent cu $a = $a / 3;
$a %= 2; // echivalent cu $a = $a % 2; restul impartirii lui $a la 2
 
$a = &$b; /* $a este o referinta la $b, adica ambele variabile fac referire 
   la aceeasi entitate; daca $a se schimba, se va schimba si $b. 
   Altfel spus, $a este un alias pentru $b */
 
$s = "Salut"; // atribuire simpla
$s .= " straine!"; // echivalent $s = $s . " straine!";

Operatori pentru siruri de caractere

In aceasta categorie sunt inclusi 2 operatori ".=" (operator de atribuire prin concatenare - vezi mai sus) si "."
Punctul (.) este operatorul de concatenare (legare) stringuri.

print "Text1" . " legat de " . "Text2"; // afiseaza Text1 legat de Text2
 
$a = "Eu am";
print $a . " mere"; // afiseaza Eu am mere;

Operatori de control al erorilor @

Operatorul @ este folosit pentru a suprima erorile sau avertismentele produse de PHP.

// $nedefinit = 1; - nu se executa, variabila nu e definita
print $nedefinit; // Notice: Undefined variable: nedefinit in file.php on line 120
@print $nedefinit; // nu va genera nici un avertisment / notificare
 
include( "inexistent.php" ); // Warning: include(nedefinit) failed to open...
@include( "inexistent.php" ); // nu afiseaza nici un avertisment

Operatorul de executie ` `

Operatorul de executie permite rularea unor aplicatii sau comenzi ale sistemului de operare direct din PHP. Rezultatul executiei este capturat de script si poate fi prelucrat sau afisat. Operatorul ` ` este echivalent cu functia shell_exec.

# in ambele situatii de mai jos este afisat continutul directrului curent
$output = `ls -al`;
echo "<pre>$output</pre>";
 
$output = shell_exec('ls -al');
echo "<pre>$output</pre>";

Alti operatori

PHP mai dispune de urmatoarele tipuri de operatori:

  • Operatori aritmetici: +, -, *, etc
  • Operatori pe biti: &, |, ^, ~, <<, >>
  • Operatori logici: and, or, xor, &&, ||
  • Operatori de tip: instanceof
  • Operatori pentru vectori: asemanatori celor de comparare, doar ca se aplica vectorilor, operatorul de uniune (+) leaga doi sau mai multi vectori
Daniel a spus nu inteleg - 24.10.2013

Nu am inteles deloc operatorul de executie. Ati putea da alt exemplu poate mai simplu si mai comun? Ce inseamna 'ls-al'?

Alexandru a spus Pentru Daniel - 25.10.2013

Operatorul incearca sa ruleze comanda specificata (ca si cum ai da Start->Run din Windows). In exemplul meu, "ls -al" este o comanda de listare a continutului folderului curent (pe sistemele de tip UNIX/Linux), dar operatorul poate rula orice comanda/aplicatie valida pe sistemul de operare pe care il folosesti.

Exemple:

$output = `dir`;
$output = `date.exe /T`;
$output = `c:\scripts\ceva.bat`;
$output = `php.exe -c some-script.php`;
$output = `c:\Windows\notepad.exe`;

Ca idee, vor fi destul de rare situatiile cand vei avea nevoie sa executi ceva pe server dintr-un script de PHP, dar e bine de stiut ca exista posibilitatea asta.

Daniel a spus mersi - 25.10.2013

Multumesc, acum am inteles ce face

Daniel a spus e grele rau de tot - 30.03.2015

V as ruga sa ma ajutati cu doua raspunsuri:
1: Ce trebuei sa invat mai exact pentru a crea o retea de socializare
2: Ce trebuie sa invat mai exact pentru a crea un program de contabilitate == Va multumesc si astept un raspuns

Alexandru a spus Pentru Daniel - 30.03.2015

Raspuns scurt, pentru ambele intrebari: tot ce e pe acest site (Formulare, Headere, Cookie-uri, Sesiuni, Fisiere) + alte lucruri care nu sunt inca pe site (Baze de date, Clase, Template-uri).

Raspuns lung, pentru ambele intrebari: orice problema vrei sa rezolvi (ex. sa creezi o retea de socializare) trebuie sa o "spargi" in activitati concrete pe care poti sa le evaluezi cu usurinta.

De exemplu, la o retea de socializare iti trebuie: pagina de login, pagina de afisare a news-urilor, pagina de postare, etc. Pagina de login o poti "sparge" in: login, creare cont, recuperare parola, etc. Daca o functionalitate a site-ului face mai mult de un lucru, trebuie impartit in activitati mai mici si mai specifice.

In final, vei obtine o lista (luuunga) de activitati foarte specifice pe care le vei putea identifica pe site-ul asta, fie in cadrul lectiilor, fie printre exemple (de ex. formular de login).

Astfel iti va fi mai usor sa te apuci efectiv sa implementezi ceva si vei sti singur ce trebuie sa inveti. Asadar, raspunsul la intrebarile tale ti-l vei putea da tu singur (si doar tu, nimeni altcineva).

Ai mai putea face site-ul tau din scripturi luate de pe net, sau din aplicatii gata facute pe care, daca esti incepator, nu le vei putea intelege si in final va iesi o mare oala de spaghete. Unii reusesc sa se descurce cu asa ceva, altii nu. Iti recomand totusi sa iti scrii singur propriile scripturi, mai ales daca vrei sa inveti cu adevarat programarea web.

Succes!

Daniel a spus yahaaaaaa - 15.11.2016

dupa un an am ajus tot la voi =)))) moama ce mai raspuns, iti foarte multumesc de amabilitate, esti un dragutz, visam pe vremea aia, ahaaaaaa.. e grele rau php asta, mormane de informatii...

Daniel a spus m a innebunit functia asta - 25.12.2016

$gasit = false;
while(!$gasit) este =
$gasit == false

conditia 2 o inteleg usor, daca gasit este false da'i drumul la cod dar !$gasit m am nenorocit )))) am incercat sa imi explic cu:
$a = 5;
$b = 5;

if($a != $b){
echo 'true';
}else{
echo 'false';
}

dar tot degaba ca acolo e altfel... ajutorrrrrrrrrrrrrrrr

Daniel a spus m a innebunit functia asta - 25.12.2016

dupa o ora mi a picat fisa, acum nu stiu daca este o fisa buna dar am luat-o asa, boolean = true false, so, semnul ! a transformat false in true, a inceput codul, cand false a devenit true semnul ! i a dat dat lui true valoare false si drept urmare scriptul s-a oprit... uite ce fac eu de craciun ))))) buna pagina voastra, daca era si video ma culcap pe monitor, multumesc de raspuns bosule ;p mai aduci si tu fericire la oamenii disperati

Dan a spus foarte bun site-ul! - 12.01.2018

cum a explicat site-ul aste incrementarea si diferenta intre incrementare dupa si inainte nu am vazut mai buna. Este ceva simplu ce nu intelesesem inainte.


Adauga un comentariu la aceasta sectiune.