Claudiu Persoiu

Blog-ul lui Claudiu Persoiu


Archive for the ‘php6’ tag

PHP6, doar o alta poveste… (PHP6 si cartile)

without comments

Gata, razboiul s-a terminat, PHP7 s-a lansat, iar PHP6 va ramane doar o legenda, o poveste a versiunii care nu a existat.

Dupa o vreme nu cred ca se mai astepta nimeni sa apara, au trecut totusi aproape 10 ani, dintr-un total de 20 de ani de viata pentru PHP.

Dar cum se poate ca o versiune atat de asteptata sa nu apara de loc?

Sa incepem cu inceputul, cand, acum aproximativ 10 ani, PHP devenea un limbaj “serios”. Dupa versiunea PHP5, model obiectual avea in sfarsit vizibilitate specifica pentru metode si proprietati, obiectele nu mai erau copiate, ci trimise prin referinta. Aceste facilitati au generat o multitudine de framework-uri obiectuale, care acum erau destinate si mediului enterprise, nu doar pentru site-uri micute.

In tot acest context exista o problema, internationalizarea.

Asa a aparut PHP6, trebuia sa fie un limbaj care sa foloseasca nativ Unicode, mai specific UTF-16. Asa totul se va procesa intr-un format unic si international.

Proiectul a fost pornit si intretinut de Andrei Zmievski. Poate astazi nu multi au auzit de Andrei, dar acum 10 ani era foarte popular pentru proiecte precum Smarty si PHP-GTK.

Dupa cativa ani proiectul a ramas intepenit, iar atunci a aparut PHP5.3. Acesta, desi aducea schimbari importante, nu era o versiune majora pentru ca inca mai era speranta ca intr-o zi va fi un PHP6.

Existau totusi niste oameni plini de speranta! Si mai ales, care au fost gata sa monetizeze speranta!

Fie ca unii au fost autori, iar altii editori, ei stiau un lucru legat de carti (in special de cele tehnice) ca au niste lucruri clare: un public tinta si o perioada in care este relevanta.

Dar sa analizam si niste rezultate.

PHP_6_and_MySQL_5_for_Dynamic_Web_Sites_Visual_QuickPro_GuidePHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide (3rd Edition) (Peachpit Press – 2008) – Larry Ullman

Larry a scris mai multe carti, printre care: “PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide (2nd Edition)” si evident “PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide”.

Intamplator am avut ocazia sa rasfoiesc toate cele 3 carti, dar nu in ordinea cronologica ci pur intamplator am inceput cu “PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide (2nd Edition)”. Ce e interesant este ca similitudinea este izbitoare, practic a pus un 6 in titlu si in rest aproape ca nu a schimbat cartea de loc.

In general toate cartile Visual QuickPro Guide sunt carti pentru incepatori, iar de la o editie la alta lucrurile nu se schimba prea mult, doar se adapteaza.

Professional_PHP6_Wrox_Programmer_to_ProgrammerProfessional PHP6 (Wrox 2009) – Ed Lecky-Thompson, Steven D. Nowicki (Thomas Myer)

Interesant este ca in imagine apar 3 persoane, dar pe Amazon.com si pe Wrox apar doar doua nume, de asta am tinut sa-l trec separat, este vorba de Thomas Myer.

Ma intreb oare daca Thomas Myer a cerut sa dispara, sau a fost scos? E bizar sa ai numele pe o carte dar sa nu apari in lista de autori pe site-ul editurii.

Nu intamplator exista si o “Professional PHP5” – Ed Lecky-Thompson, Heow Eide-Goodman, Steven D. Nowicki, Alec Cove.

PHP_6_MySQL_Programming_for_the_Absolute_BeginnerPHP 6/MySQL Programming for the Absolute Beginner (Cengage Learning PTR – 2008) – Andrew B. Harris

Este intradevar o carte bizara, nu exista un echivalent de PHP5, ba chiar pe site-ul scriitorului nu mai exista alta carte de PHP: .

Exista oare un motiv? In cazul lui Larry Ullman era un alt subiect atins, un alt public tinta, dar in acest caz e doar ciudat, un singur autor, o singura carte de PHP si intr-o versiune fantoma, publicata in 2008.

PHP_6_Fast_and_Easy_Web_DevelopmentPHP 6 Fast and Easy Web Development (Cengage Learning PTR – 2008) – Matt Telles, Julie C. Meloni

Fara prea multa dificultate am gasit si: “PHP Fast & Easy Web Development” – Julie C. Meloni

Ciudatenia acestei carti este ca Matt Telles nu mai are alta carte de PHP, desi are de Python, C# si C++.

Ceva imi spune ca poate el a fost adus doar ca sa actualizeze cartea originala la noul context. Am crezut ca este doar o parere presonala, doar ca la o cautare pe Google am gasit ca este si Technical Reviewer pentru “PHP 6/MySQL Programming for the Absolute Beginner (Cengage Learning PTR)”, carte care a fost prezentata anterior.

Beginning_PHP_6_Apache_MySQL_6_Web_DevelopmentBeginning PHP 6, Apache, MySQL 6 Web Development (Wrox – 2009) – Timothy Boronczyk, Elizabeth Naramore, Jason Gerner, Yann Le Scouarnec, Jeremy Stolz

Cartea originala a fost evident: “Beginning PHP, Apache, MySQL Web Development” – Michael K. Glass, Yann Le Scouarnec, Elizabeth Naramore, Gary Mailer, Jeremy Stolz, Jason Gerner

Au iesit Michael K. Glass si Gary Mailer, iar in locul lor a intrat Timothy Boronczyk.

PHP a fost un limbaj foarte la moda in perioada respectiva, iar PHP6 a fost foarte asteptat.

Cum se poate totusi asta? Cum se poate sa existe atatea carti de la edituri importante pentru un limbaj de programare care nu a existat? Raspunsul este simplu: lacomie.

Exista doua explicatii posibile: ori autorul a incercat sa acapareze piata cu o noua versiune, ori editura a vrut sa forteze nota, in speranta de a capta piata. Probabil speranta era ca in momentul cand ar fi aparut, ar fi avut cartile deja disponibile pentru livrare.

Acesta este un alt motiv pentru care nu era un plan bun ca versiunea PHP NG sa devina PHP6, ar fi insemnat sa apara o versiune de PHP si sa aiba deja o serie de carti scrise, ba chiar scrise de cativa ani.

Pun pariu ca atunci cand s-a votat intre PHP6 si PHP7 erau niste editori plini de speranta.

In continuare, va urez lectura placuta!

Written by Claudiu Persoiu

22 February 2016 at 9:11 PM

Posted in PHP

Tagged with ,

Exista viata si fara PHP6 – Retrospectiva 2012

with 3 comments

A mai trecut un an fara suport nativ de unicod in PHP. Da, nu a aparut inca PHP6, in caz ca cineva chiar se mai intreba asta…

In schimb, versiunea care a aparut este PHP 5.4. Cu aceasta versiune cred ca nu au fost adaugate decat lucruri de finete, nu mai e o schimbare asa de mare cum a fost in cazul PHP 5.3. In PHP 5.4, schimbarea majora o reprezinta traits si, favorita mea, noua varianta de closure.

Dupa cum anul trecut cuvintele cheie au fost Drupal si Magento, anul acesta cuvantul cheie a fost doar Magento.

Acum doua luni, mai mult fortat de imprejurari, am sustiunut examenul de certificare pentru Magento Plus. Pentru aceasta certificare, angajatorul meu, Optaros, a avut o influenta majora. Am fost mai mult sau mai putin obligat sa-l sustin si alaturi de asta a trebuit si sa facem parte dintr-un study group organizat de companie.

Nu am mai facut parte dintr-un study group din facultate si trebuie sa recunosc ca uitasem utilitatea lui. Cei care aveau mai multa experienta cu Magento (fata de mine care am putin mai mult de un an), au ajutat foarte mult la clarificarea unor probleme si la documentarea lor.

Dar mai multe despre asta intr-un alt blog, care va urma curand (sper)…

Oricum, dupa ce a trebuit sa studiez atat de in detaliu Magento, trebuie sa recunosc ca am mult mai mult respect pentru platforma. Dupa ce analizezi arhitectura din spate, incepi sa percepi altfel lucrurile. Arhitectura este foarte interesanta si destul de flexibila, lucru care te face sa treci cu vederea unele neajunsuri.

Acum ca a inceput un nou an, imi doresc sa public mai mult, cred ca in ultima perioada nu am fost foarte “productiv” cand vine vorba de publicat, fie ca este text sau cod.

Si anul acesta mi-am propus sa sustin cel putin un examen de certificare. Cum certificarea de Magento era in plan de abia pentru anul acesta, inca mai am optiuni pe lista.

Cam atat despre 2012 si planurile pentru 2013.

Va doresc un 2013 extraordinar!

Written by Claudiu Persoiu

14 January 2013 at 9:54 AM

Posted in Diverse,PHP

Tagged with , ,

A mai trecut un an iar PHP 6 ramane un mit – retrospectiva 2011

without comments

A devenit o traditie pentru mine sa incep retrospectiva anuala cu acest subiect.

PHP 6 este la fel de aproape de lansare cum era si anul precedent, sau acum doi ani, adica lipsit de perspectiva. In 2011, PHP 5.4 a ajuns la RC4 si probabil se va lansa in curand versiunea finala, lucru care inseamna ca inca nu se previzioneaza o data pentru lansarea PHP 6. Dar despre PHP 5.4 cu alta ocazie, este pe lista mea de “TODO” sa vad ce a ajuns in RC4.

Cum in PHP 5.3 cuvintele cheie pentru mine au fost namespaces, Anonymous functions, closures si garbage collector, in PHP 5.4 se pare ca aceste cuvinte cheie vor fi traits, din nou closures si scalar type hinting, alaturi de multe alte noutati.

Cand am scris primul meu blog anual despre PHP 6, lucram in principal la site-uri in romana, de acolo si dorinta mea pentru o versiune care sa suporte in mod nativ aceasta limba sau oricare alta fara nici o modificare. Pe atunci lucram in cea mai mare parte direct cu limbajul, de cele mai multe ori fara sa folosesc un framework . Dar de atunci a trecut mult timp si mutle lucruri s-au schimbat, acum folosesc aproape exclusiv framework-uri si platforme care m-au indepartat de limbaj oferindu-mi o noua perspectiva arhitecturala.

Dupa mai bine de un an in cadrul NCH, am decis ca este timpul pentru o schimbare. Si de data asta este vorba tot de o corporatie venita din state cu o sucursala in Romania. De data asta este vorba de Optaros. Desi nu intentionam sa-mi schimb locul de munca, am dat curs unei invitatii la interviu si pe scurt, am plecat. De mult simteam nevoia sa lucrez din nou pentru clienti externi, dupa experienta NCH unde toate proiectele erau interne, simteam nevoia de o schimbare.

Din nou proiectele sunt si mai mari, cu alte probleme de scalabilitate. Dar cred ca asta face web development-ul atat de interesant, cu cat ai probleme mai mari de scalabilitate, cu atat inseamna ca lucrezi la un proiect mai mare.

Anul trecut cuvintele cheie au fost Linux si Symfony framework. Pentru anul care tocmai s-a incheiat cuvintele cheie probabil au fost: Magento si Drupal.

Dupa o scurta perioada de lucru cu Magento, pot spune ca mi se pare incredibil cum o platforma atat de mare are atat de putina documentatie si de multe ori atat de multa inconsistenta. Este o plaforma foarte complexa cu care poti face foarte multe lucruri, dar cand vine vorba de documentatie, se pare ca abordarea se rezuma la a analiza core-ul. Venind din lumea Symfony, unde exista literalmente carti intregi de documentatie, puse la dispozitie in mod gratuit, mi se pare incredibil cat de putina si descentralizata documentatie este pentru Magento. Dar de asemenea este un subiect pentru un alt blog. Cred ca aici echipa Optaros m-a ajutat destul de mult ca sa inteleg cum sa abordez problemele.

Un alt eveniment important pentru mine acest anul trecut a fost Yahoo! Open Hack Day, eveniment tinut si in Romania in 2011. Nu stiu daca am mai vazut atata entuziasm si energie intr-un singur loc, intr-o singura zi. Pentru mine ca programator a fost o experienta de neuitat, unul din momentele care m-au facut sa-mi aduc aminte de ce am ales aceasta profesie.

In acest an am dat si examenul de certificare pentru PHP 5.3, chiar la inceptului anului. Examenul nu a fost atat de greu cum ma asteptam, desi se pare ca emotiile raman neschimbate. Faptul ca am mai sustinut un examen m-a ajutat mult, incredibil cat de multe lucruri iti aduci aminte cand le recitesti. Anul trecut mi-am propus sa sustin cel putin un examen de certificare pe an, deci trebuie sa incep pregatirile pentru urmatorul examen.

Concluzionand, 2011 a fost un an bun, plin de realizari si provocari, chiar daca nu am bifat foarte multe lucruri pe rezolutia de an, am realizat si multe lucruri care nu erau pe ea. Dar acum este timpul pentru o noua rezolutie de an.

Iar acum va urez un 2012 mai bun si mai plin de realizari! La multi ani!

Written by Claudiu Persoiu

3 January 2012 at 4:45 PM

Posted in Diverse

Tagged with , , , ,

PHP 5.4 Alpha 1 este aici!

without comments

Acum trei zile, adica pe 28-06-2011 a fost anuntat pe ww.php.net versiunea PHP 5.4 alfa 1!

Practic in aceasta versiune sunt inglobate ultimele lucruri care au fost realizate pentru PHP 6 si nu au apucat sa intre in PHP 5.3, alaturi de alte cateva lucruri noi.

Unele din cele mai interesante faclitati noi:

Traits

Un nou feature de OOP. Practic se folosesc pentru refolosire orizontala de cod, adica mostenire de metode in loc de extiderea de clase.

trait Inharitable {
    public function test() {
        echo 'Class: ' . __CLASS__ . ' Method: ' . __METHOD__ . PHP_EOL;
    }
}

class A {
    use Inharitable;
}

class B {
    use Inharitable;
}

$a = new A();
$a->test(); //Class: Inharitable Method: Inharitable::test

$b = new B();
$b->test(); //Class: Inharitable Method: Inharitable::test

Trait-urile din PHP 5.4 sunt practic noile namespace-urile din PHP 5.3, adica cea mai interesanta facilitate din PHP 5.4.

Scalar type hinting

Pana la PHP 5.3 nu exista type hinting decat pentru clase, interfete si array-uri. Acum se va putea face type hinting si pe tipuri scalare de date cum ar fi: int, string, float, bool si resource.

function test(string $var) {
  echo $var;
}

$a = 'aa';
test($a);

Din pacate pe versiune alfa instalata la mine pe calculator primesc: Catchable fatal error: Argument 1 passed to test() must be an instance of string, string given, called in .. on line 58 and defined in … on line 52

Ce pot spune… e inca alfa…

Closures

Da, stiu, exista si in PHP 5.3, dar e incomparabil. In PHP 5.3 daca vroiau un closure trebuia sa folosesti cuvantul use iar apoi sa specifici variabilele la care functia lambda va avea acces.

In PHP 5.4 incepe sa arate mai mult a JavaScript, in sensul bun:

class closureTest {

    private $a;

    function test() {
        $this->a = 'object var';
        return function () {
            echo $this->a;
        };
    }
}

$a = new closureTest();
$b = $a->test();
$b(); // object var
unset($a);
$b(); // object var

Closure in adevaratul sens al cuvantului cu lambda functions asa cum ar trebui sa fie! Asa cum si lambda functions existau si inainte de PHP 5.3, dar de abea dupa ce a aparut noua sintaxa au devenit populare, acum era vremea pentru closures.

Acestea sunt lucrurile care mi se pare cele mai interesante, dar sunt doar o parte din ce aduce nou PHP 5.4!

Este foarte probabil ca pana la finalul anului sa apara si versiunea finala.

Sunt curios daca o data cu PHP 5.4 va aparea si o noua certificare, avand in vedere ca schimbarile nu sunt totusi atat de majore.

Written by Claudiu Persoiu

1 July 2011 at 8:27 AM

A mai trecut un an iar PHP 6 nu va veni

with 4 comments

A mai trecut un an iar PHP 6 nu va veni.

De 2 ani astept PHP 6, cred ca a devenit mai mult un blog traditional cu care sa inchei anul.

PHP 6 nu va mai veni pentru ca trunk-ul a fost abandonat si refacut dintr-unul de 5.3.

In alta ordine de idei PHP 5.3 castiga popularitate. Frameworkuri precum Zend Framework si Symfony pregatesc pentru anul 2011 cate o versiune in 2.0 care va avea nevoie de PHP 5.3+. Chiar si CodeIgniter, un framework traditional PHP 4, va necesita o data cu versiunea 2.0 minim PHP 5.1.6.

Mai mult, certificarea oficiala Zend pentru PHP este mai nou ZCE 5.3, iar aceasta devine destul de populara, chiar daca a fost lansata doar cu cateva luni in urma.

Dar un nou an se incheie si este timpul sa bifam realizariile din rezolutia de anul trecut si sa o scriem pe urmatoarea.

Anul trecut am terminat masterul, cu asta am incheiat mult prea multi ani de scoala decat imi doresc sa calculez. De fapt aceasta este prima iarna cand nu sunt intr-o forma de invatamant, poate de asta mi se pare ca am ceva mai mult timp liber :).

Am schimbat locul de munca, iar cu asta am fost fortat sa folosesc cateva lucruri care erau pe lista de TODO de ceva vreme:

  • Linux
  • Symfony Framework
  • Linux era un subiect in jurul caruia ma invart inevitabi de destul de multi ani, fara sa-l aprofundez de loc. A fost mereu pe lista mea de “todo”, dar niciodata nu am avut atata rabdare ca sa intru in detalii cu el sau nu am avut continuitate atunci cand am facut-o. Cand am ajuns la noul loc de munca m-am trezit in fata unui calculator cu Ubuntu si un pic de panica m-a cuprins.

    Dupa cateva luni am facut un nou pas, pentru prima data in viata mea am fost la un curs profesional. Cursul era organizat de Info Academy. Platit din buzunarul meu si usor suprapus cu programul de lucru. Dar am ajuns la concluzia ca trebuie sa-l fac. Probabil nu suna ca mare lucru, dar pentru mine care sunt in general autodidact a fost destul de ciudat. Acum ca s-a terminat pot spune ca a fost o foarte buna investitie si il recomand.

    Undeva pe parcursul cursului mi-am dat seama ca e timpul sa mai fac cate un boot in linux si acasa. Urmatorul pas a fost reconfigurarea boot managerului sa booteze direct in linux. Acum, dupa ce folosesc aproape exclusiv linux, am ajuns la concluzia ca este suficient de user friendly incat sa fie o alternativa reala pentru Windows.

    Symfony framework este alt subiect prafuit pe lista de “todo”. Desi am mai abordat CodeIgniter si Zend Framework, de Symfony nici macar nu m-am apropiat pana anul trecut. Se simte diferenta fundamentala de concept dintre ZF si Symfony, iar eu am simtit-o pe pielea mea. Acesta a fost alt motiv de panica pentru mine la noul loc de munca, pana la urma “all frameworks suck”.

    Nu este un framework usor de invatat din pricina conceptelor, dar acum sunt de parere ca merita. Ce-mi place cel mai mult la acest framework este generarea de CRUD, care se face foarte usor si totusi este foarte puternica si flexibila. De asemenea flosirea fisierelor YML, care se pare ca au fost preluate de la Ruby on Rails, este o alternativa mult mai buna la fisierele ini care sunt suportate nativ in PHP.

    Ca sa concluzionez, 2010 a fost un an bun, cu multe realizari, chiar daca nu am bifat totul pe rezolutia de anul trecut, cred ca am bifat destule.

    Iar acum va urez un an 2011 mai bun si plin de realizari! La multi ani!

    Written by Claudiu Persoiu

    31 December 2010 at 5:38 PM

    Posted in Diverse,PHP

    Tagged with , , , , ,

    A mai trecut un an iar PHP 6 tot nu este aici…

    without comments

    A mai trecut un an iar PHP 6 tot nu e aici…

    Dar asta nu este tocmai o noutate, este al 4-lea an in care aceasta versiune mult asteptata nu se lanseaza, nu degeaba este numita cea mai asteptata versiune.

    Totusi a fost un an bun pentru comunitate, chiar daca Unicode nativ nu exista inca intr-o versiune stabila, acum avem cam toate celelalte noutati asteptate in PHP 5.3, care probabil va mai avea nevoie de cativa ani ca sa devina folosit pe scara larga.

    Chiar daca toata lumea astepta in acest an ca Oracle sa intre in forta pe piata de baze de date medii si mici prin achizitia Sun, marind portofoliul deja detinut pe piata enterprise. Se pare ca nu a fost asa, CE inca analizeaza propunerea.

    Oricum MySQL nu mai este ce era acum 5-6 ani, cand nimeni nu indraznea sa-l foloseasca pentru produse enterprise, acum MySQL este un produs gata pentru a fi folosit atat pentru proiecte mici cat si pentru produse care necesita muta scalabilitate.

    Dar revenind la anul care tocmai s-a incheia, a fost un an plin, chiar si in timp de criza.

    Written by Claudiu Persoiu

    13 January 2010 at 8:30 AM

    Posted in Diverse,MySQL,PHP

    Tagged with , ,

    PHP si Unicode folosind UTF-8

    without comments

    Una dintre cele mai mari probleme legate de web este coadarea.

    Pe vremuri standardul folosit de baza folosit era ISO 8859-1, unde erau definite 191 caractere latine, iar 1 caracter = 1B. Pentru limbi diferite erau folosite codari diferite, dar de aici pleaca multe probleme legate de portabilitate, posibilitatea de a acoperii un numar mai mare de limbi etc.

    Problema apare cand un proiect trebuie sa fie disponibil in mai multe limbi, iar numarul limbilor nu este controlat. Un proiect cum este WordPress de exemplu trebuie sa poata fi folosit in orice limba.

    Unicode este o alternativa mult mai buna pentru ISO 8859-1, acesta avand definite peste 100.000 caractere. Cu alte cuvinte cuprinde cam toate caracterele existente in orice limba.

    Cum spuneam si la MySQL, caracterele UTF-8 au o lungime variabila intre 1 si 4B.

    Afisarea de continut UTF-8 in paginile PHP

    Pentru ca browserul sa interpreteze continutul unei pagini in format UTF-8, acesta trebuie sa primeasca header-ele potrivite:

    <?php header("Content-type: text/html; charset=utf-8");?>

    Atentie! Headerul trebuie sa fie primele lucruri trimise catre server! Adica trebuie sa fie primul lucru afisat pe pagina.

    Tipul documentului se poate specifica si prin meta-ul “Content-Type”. Daca mai exista un tag meta similar in pagina acesta trebuie scos si inlocuit cu:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    Fisierul .htaccess si procesarea stringurilor

    Adaugati in fisierul .htaccess (pentru serverul Apache) urmatoarele linii:

    # charset-ul default folosit de PHP
    php_value default_charset utf-8
    # codarea pentru mbstring
    php_value mbstring.internal_encoding utf-8
    php_value mbstring.func_overload 7

    Prima linie seteaza charset-ul default pentru PHP, acesta poate sa nu fie setat din php.ini.

    A doua si a treia linie linie seteaza functile mbstring (multi byte string).

    Folosind UTF-8, cum spuneam si mai sus 1 caracter != 1B, iar de aici pot aparea erori:

    $var = 'aşadar';
    
    echo strlen($var).PHP_EOL; // 7
    echo strtoupper($var).PHP_EOL; // AşADAR
    
    // folosind functii mbstring
    echo mb_strlen($var).PHP_EOL; // 6
    echo mb_strtoupper($var).PHP_EOL; // AŞADAR

    De asta am setat mai sus modul pentru mbstring folsind fisierul .htacess. Continutul introdus prin formulare trebuie procesat folosind functii mbstring, pentru a evita probleme ca cele de mai sus.

    Functiile disponibile sunt in manual.

    Codare continut vechi

    Exista multe moduri de a converti continut ISO 8859-1 in UTF-8. Doua dintre solutiile de conversie puse la dispozitie de PHP sunt:

    – functia iconv() care converteste dintr-un format in altul:

    echo iconv("ISO-8859-1", "UTF-8", "Test");

    – functia utf8_encode() care converteste din ISO 8859-1 in UTF-8:

    echo utf8_encode("Test");

    Ce ne rezerva viitorul?

    Mult asteptatul PHP6 va avea suport nativ pentru Unicode, deci toate trucurile de mai sus nu vor mai fi necesare. In momentul cand scriu acest blog PHP 6 este gata 70.70%, iar cu putin noroc va fi gata in mai putin de un an.

    Written by Claudiu Persoiu

    11 August 2009 at 10:40 AM

    Posted in PHP

    Tagged with , , ,

    PHP 5.3 este aici!

    without comments

    Ieri a fost lansat oficial PHP 5.3! Aceasta versiune aduce cele mai multe schimbari de la versiune 5 pana acum, iar PHP 5.0 a fost lansat acum aproape 5 ani.

    Pe langa noile facilitati pe care le aduce versiunea (despre care am mai discutat), sper ca acum se va grabi si finalizarea lui PHP6, care in principiu o sa fie aproape PHP5.3+Unicode.

    De asemenea pe pagina PHP-GTK un anunt spune:

    Rumours of PHP-GTK’s death have been greatly exaggerated! The project is very much still alive, but we’re waiting for PHP 5.3 to come out, and also some work needs to be done on the Cairo extension before a new release can be made. This should be completed soon. This release will come with support for GTK+ 2.14 and 2.16, Cairo, and PHP 5.3.

    Din noutatile aduse, una dintre facilitatile care eu ma intreb in ce masura va prinde este PHAR. Aceasta permite crearea de “arhive” a fisierelor php, intr-un mod inspirat din Java unde se foloseste JAR. Accesarea arhivelor se face print-un stream (phar), deci teoretic se poate distribui o intreaga aplicatie PHP intr-un singur fisier, fara a fi nevoie de extensia PHAR sa fie instalata.

    Written by Claudiu Persoiu

    1 July 2009 at 10:32 AM

    Posted in PHP

    Tagged with , , ,

    PHP 5.3 final se apropie

    without comments

    Se pare ca PHP 5.3 aproape a fost lansat azi. Dar pana la urma lansarea a fost amanata pentru data de 30.06.

    Cum am mai spus si intr-un post anterior, PHP 5.3 este o versiunea destul de importanta aducand multe facilitati noi, care din pacate nu au putut fi lansate ca PHP 6, aceasta din urma avand (cand va ajunge sa fie lansata) suport pentru Unicode.

    Mai multe despre facilitatile aduse de PHP 5.3 in:  “PHP 5.3 ce aduce nou?“.

    Cred ca asta este un moment bun sa va verificati app-urile pentru compatibilitate.

    Written by Claudiu Persoiu

    25 June 2009 at 12:10 PM

    Posted in PHP

    Tagged with ,

    PHP 5.3 ce aduce nou?

    without comments

    Pana la versiunea mult asteptata 6, PHP 5.3 este deja la RC 2.

    PHP 5.3 vine cu multe lucruri noi, de fapt sunt atat de multe incat putea sa fie cu succes versiunea 6, dar de ce nu este PHP 6? Pentru ca toata lumea se asteapta ca versiunea 6 sa aiba suport Unicode, iar cand o comunitate de programatori asteapta de mai bine de 3 ani asta, nu poti pur si simplu sa le spui ca te-ai gandit sa lasi suportul pentru Unicode pentru versiunea 7.

    Namespaces

    Printre noutati se afla si namespaces, mi se pare o idee interesanta dar nu fantastica, initial acestea nu erau pe lista de prioritati pentru ca se considera ca problema lor se poate rezolva relativ simplu folosind prefixuri si clase.

    Un exemplu de namespace:

    <?php
    // clasa.php
    
    // definirea namespace-ului, in cazul asta trebuie sa fie prima instructiune din fisier
    namespace teste;
    
    // o clasa cu un conscturctor
    class clasaTest {
       function __construct() {
          echo "in constrcutor";
       }
    }
    
    // o functie
    function funcTest() {
       echo "in functie";
    }
    
    // o constanta
    const CONSTANTA = 'global';
    ?>

    Acelasi fisier se mai poate defini intr-un anumit namespace si in felul urmator:

    <?php
    // clasa.php
    
    // definirea namespace-ului
    namespace teste {
    
       // o clasa cu un conscturctor
       class clasaTest {
         function __construct() {
            echo "in constrcutor";
         }
       }
    
       // o functie
       function funcTest() {
          echo "in functie";
       }
    
       // o constanta
       const CONSTANTA = 'global';
    
    }
    ?>

    Fisierul in care fac testele:

    <?php
    
    // includem fisierul de mai sus
    require('clasa.php');
    
    $obj = new clasaTest(); // Fatal Error:clasa 'clasaTest' not found in ...
    
    $obj2 = new teste\clasaTest(); // afisaza "in constructor"
    
    // aparent suprascriem constanta
    const CONSTANTA = 'local';
    
    echo CONSTANTA; // afisaza "local"
    
    echo teste\CONSTANTA; // afisza "global"
    
    teste\funcTest(); // afisaza "in functie"
    
    ?>

    iar daca vrem sa nu mai folosim operatorul “\” si numele namespace-ului:

    <?php
    // trebuie sa fie prima insctructiune
    namespace teste;
    
    // includem fisierul de mai sus
    require('clasa.php');
    
    $obj = new clasaTest(); // afisaza "in constructor";
    
    // suprascriem constanta
    const CONSTANTA = 'local'; // Notice: Constant teste\CONSTANTA already defined in...
    
    echo CONSTANTA; // afisaza global
    
    ?>

    Si acestea sunt functiile de baza, folosindu-le pe acestea o sa ajute portabilitatea, si scalabilitatea. Acum numele de clase si functii nu mai trebuie sa fie unice, trebuie pur si simplu sa fie in namespace-uri diferite.

    Functile lambda si “closures”

    Cele mai interesante facilitati mi se par functile lambda si “closures”.

    Suna cunoscut? Poate pentru ca sunt foarte folosite in JavaScript:

    <script language="javascript">
    closure = function(text) {
       alert(text);
    }
    
    closure("hello");
    </script>

    Iar acum in php este posibil:

    <?php
    $closure = function ($text) {
       return $text;
    };
    
    echo $closure("hello");
    ?>

    Tot la functii lambda si “closures” a mai fost introdus si “use”, care permite folosirea unor variabile din exterior:

    <?php
    $x = 'Claudiu';
    $closure = function ($text) use ($x) {
       return $text.' '.$x;
    };
    
    echo $closure("hello"); // afisaza "hello Claudiu"
    ?>

    Iar daca in exemplul de mai sus vrem sa modificam variabilele care sunt parametri la “use” nu trebuie decat sa le trimitem prin referinta:

    <?php
    $x = 'Claudiu';
    $closure = function ($text) use (&$x) {
       $x = 'utilizator';
       return $text;
    };
    
    echo $closure("hello"); // afisaza "hello"
    
    echo $x; // afisaza "utilizator"
    ?>

    Iar ca sa luam un exemplu concret unde pot fi utile, sa zicem functia “usort“:

    <?php
    function cmp($a, $b)
    {
        if ($a == $b) return 0;
        return ($a < $b) ? -1 : 1;
    }
    
    $a = array(3, 2, 5, 6, 1);
    
    usort($a, "cmp");
    
    // este echivalent cu:
    
    $a = array(3, 2, 5, 6, 1);
    
    usort($a, function ($a, $b){
        if ($a == $b) return 0;
        return ($a < $b) ? -1 : 1;
    });
    ?>

    Dragut, nu? Cred ca asa se vede si mult mai clar ce se intampla in functie si la ce foloseste aceasta.

    De asemenea obiectele se pot comporta ca niste closures folosind noua “metoda magica” __invoke():

    <?php 
    
    class testCl {
       function __invoke() {
          return "metoda de closure";
       }
    }
    
    $obj = new testCl(); // instantiem clasa
    echo $obj(); // o apelam ca pe un closure si afisaza "metoda de closure"
    
    ?>

    NOWDOC

    NOWDOC este similar cu HEREDOC doar ca nu interpreteaza variabilele si caracterele speciale. Cu alte cuvinte HEREDOC era echivalentul ghilimelelor duble, NOWDOC este echivalentul ghilimelelor simple:

    <?php
    
    $var = "5";
    
    // ghilimele duble
    echo "Valoarea este: $var <br>"; // "Valoarea este 5"
    
    // ghilimele simple
    echo 'Valoarea este: $var <br>'; // "Valoarea este $var"
    
    // HEREDOC
    echo <<<HEREDOC
    Valoarea este: $var <br>
    HEREDOC;
    // "Valoarea este 5"
    
    // NOWDOC
    echo <<<'NOWDOC'
    Valoarea este: $var <br>
    NOWDOC;
    // "Valoarea este $var"
    
    ?>

    Operatorul “?”

    Acest operator a fost putin “inbunatatit”:

    <?php
    // inainte
    echo $_GET['ceva']?$_GET['ceva']:false;
    
    // acum
    echo $_GET['ceva']?:false;
    
    ?>

    Cu alte cuvinte acum conditia poate fi folosita ca valoare pentru adevarat.

    goto

    Sincer… nuprea vad de ce era nevoie de asa ceva, dar poate nu e chiar asa rau. Si un mic exemplu:

    <?php
    
    $x = 1;
    
    label1:
    echo "la label1 $x <br>";
    $x++;
    
    if($x>3) goto label2;
    goto label1;
    
    label2:
    echo "la label2";
    
    // va afisa:
    // la label1 1
    // la label1 2
    // la label1 3
    // la label2
    ?>

    Arata mai mult a Basic decat a PHP dar chiar functioneaza.

    Mai sunt si alte noutati, am incercat sa le enumar doar pe cele care mi se pare mie mai interesante.

    Din pacate toate aceste lucruri nu vor ajunge sa fie folosite cu adevarat pe scara larga decat poate peste 2-3 ani, sau chiar mai mult. Poate nu este PHP 6 dar eu cred ca toate schimbarile vor fi mai degraba asociate cu PHP 6 decat cu PHP 5, nu cred ca vrea nimeni sa riste o intreaga aplicatie care foloseste namespace-uri sau closures pentru ca nu este versiunea “noua” de PHP 5.

    Written by Claudiu Persoiu

    10 May 2009 at 5:42 PM

    Posted in PHP

    Tagged with , , , , ,