Claudiu Persoiu

Blog-ul lui Claudiu Persoiu


Archive for the ‘php5’ tag

Noua certificare ZCE PHP 5.3

without comments

De cand a fost lansat PHP 5.3 anul trecut m-am intrebat daca Zend vor introduce si o certificare ZCE aferenta acestei versiuni.

Se pare ca o data cu abandonul versiunii PHP 6 cu ceva timp in urma directia a fost catre o certificare pentru PHP 5.3.

Perioada cred ca nu a fost intamplatoare avand in vedere ca se apropie Zend Con, cea mai mare conferinta PHP.

Ce este nou?

Diferentele de la PHP 5 la PHP 5.3 se gasesc in manual aici.

Cateva mai importante:

Materiale

Programa pentru examen se gaseste pe site-ul Zend.

Dupa ce la certificarea pentru Zend Framework am vazut ca exista un guide complet gratuit pentru membrii inregistrati, ma intrebam de ce nu exista asa ceva si pentru aceasta certificare. Se pare ca acum exista: Zend-PHP-5.3-Study-Guide-v1-3.pdf, in versiune beta! Si este gratuit!

Evident cel mai important material ramane manualul PHP, pentru ca ghidul se foloseste impreuna cu acesta.

Se pare ca nu mai exista mock tests, cum nu au existat nici pentru certificarea de Zend Framework.

Pret

Pretul se pare ca a mai crescut, nu mai este 160$ ci 190$! Pretul oricum ramane unul foarte mic avand in vedere ca un examen la Sun era 200$, iar acum 300$ la Oracle.

Persoanele care au deja o certificare PHP au un discaunt de 20% pana la finalul anului, deci daca esti deja certificat vei plati 152$.

Mult succes!

Written by Claudiu Persoiu

17 October 2010 at 12:12 PM

Posted in PHP

Tagged with , , ,

CodeIgniter 1.7 Packt Publishing – Book review partea 2

without comments

1847199488CodeIgniter este un framework open-source scris in PHP care se bazeaza pe principiul RAD.
Cartea CodeIgniter 1.7 de la PacktPublishing, scrisa de Jose Argudo Blanco si David Upton urmareste formarea unei imagini de ansamblu asupra framework-ului CodeIgniter, venind in completarea manualului.

Cartea nu este o referinta, iar acest lucru este evident in fiecare capitol cand se foloseste una dintre facilitatiile framework-ului, cititorul este mai apoi directionat catre pagina din user guide sau wiki care corespunde modulului respectiv. Ba chiar mai mult exista si sugestii catre module alternative care realizeaza aceeasi sarcina.

Autorii sustin ca pentru a citi aceasta carte sunt necesare doar cunostinte minime de PHP, o promisiune destul de greu de respectat dupa parerea mea, in general cartile care au ca target cititorii incepatori-medii sustin acest lucru. Spre surprinderea mea au avut dreptate, cititorul are nevoie doar de cunostinte de PHP4. Iar cand vine vorba de OOP nici macar nu sunt necesare cunostinte de PHP5 ci pur si simplu modelul obiectual din PHP4. In carte exista chiar si explicatie pentru copierea prin referinta! Evident copierea prin referinta nu mai este relevanta in PHP5, dar avand in vedere ca este un framework de PHP4 probabil ca trebuia mentionata. Se pare ca inca mai exista servere de PHP4 pe internet… pur si simplu trist…

Citind cartea au inceput sa-mi vina flashback-uri cu bucati de cod scrise direct in PHP si chinul de a face debugging pe ele, incercand sa inteleg munca altora… ce vremuri… groaznice desigur. Explicatia mi se pare foarte buna pentru a intelege concenptul de refolosire din spatele unui framework: “Possibly you like typing regex. Some people like lying on a bed of nails…”. Cred ca pentru un programator, in special incepator, sa citesti asa ceva te face sa realizezi ca nu trebuie sa reinventezi roata de fiecare data ci pur si simplu sa folosesti solutii gasite de altii.

Comparatia intre solutii, cred ca este cea mai amuzanta parte dintr-o carte de acest gen. Este greu sa compari de exemplu Zend Framework sau chiar CakePHP cu CodeIgniter. Pana la urma fiecare din framework-uri spun acelasi lucru, descarci si incepi sa lucrezi. Eu personal cand vreau sa folosesc un modul din Zend pur si simplu incarc autoloader-ul si trec la treaba. Din comparatie rezulta cum era de asteptat ca CodeIgniter este cea mai potrivita in general, motivatia sa spunem ca este relativ buna si destul de cinstita. Pana la urma este un framework mic si nu are facilitati complexe cum ar fi generare automata de CRUD. Imi amintesc de o carte de Java unde autorul prezenta faptul ca C++ este mai rapid decat Java ca pe un dezavantaj, evident este ridicol.

Am avut de cateva ori impresia ca exprimarea este gresita. Autorul se foloseste de “mici” greseli in termeni pentru a explica ce se intampla de fapt in spate. Cand lucrezi cu framework-uri MVC unele lucruri sunt simple si evidente, dar pentru un programator care nu este familiar cu notiunile sunt destul de greu de inteles.

Iar ca sa continui cu greselile, am gasit cateva in carte. Un moment destul de dificil cand inveti ceva nou. Din fericire sunt destul de evidente pentru ca se concretizeaza in erori, iar daca citesti cartea capitol dupa capitol vei sti ce ai de facut ca sa le repari.

Exemplele mi se par destul de consistente si bine explicata. Cand se introduce o notiune noua aceasta este explicata destul de in detaliu.

Aplicatiile rezultate nu sunt foarte complexe, de exemplu la final nu rezulta o aplicatie complexa cum ar fi cu CMS, mai degraba sunt explicate module si modul de folosire impreuna a acestora. Cititorul la final va trebui sa decida ce si cum va arata aplicatia lui. De exemplu in capitolul 13 se explica paginarea si ordonarea. Cand se face paginarea totul e ok, dar cand se face si ordonarea paginarea incepe sa dea rateuri. Mi-a luat cam 5-10 minute sa remediez problema, dar ar fi fost frumos ca aceasta problema sa fie rezolvata de catre autori.

In ansamblu mi se pare o carte reusita, in special daca nu ai cunostiinte de CodeIgniter, este asa cum o prezinta si autorii, o carte pentru dezvoltatori care vor mai multa productivitate in munca lor sau pur si simplu sunt la inceput si vor sa vada ce unelte exista. Cartea totusi nu prezinta solutii mai complexe cum ar fi un CMS sau un shopping cart ci pur si simplu ce are acest framework de oferit.

Un programator avansat poate intelege din aceasta carte structura framework-ului CodeIgniter, eventual pentru a o compara cu alte framework-uri concutente, fara sa piarda vremea cu exemple complexe si irelevante.

Written by Claudiu Persoiu

22 March 2010 at 4:14 PM

Posted in Diverse,PHP

Tagged with , ,

Factory method pattern folosind PHP 5.3 si late static bindings

without comments

Factory method design pattern introdus de GoF (Gang of Four) pe care l-am abordat si eu intr-un blog anterior, are la baza ideea unei metode care genereaza obiecte. In general implementarea este destul de “slaba” pentru ca “factory”-ul este destul de hardcodat (la fel ca mine in blogul anterior).

PHP 5.3 ofera totusi posibilitatea unei implementari foarte interesante folosind “Late static bindings“.

Clasele pe baza carora se vor genera obiectele:

// clasa abstracta de baza care urmeaza sa fie mostenita
abstract class Drink {

    // ingrediente
    protected $ingredients;

    // metoda publica care genereaza bautura
    abstract public function MakeDrink();
}

// o clasa derivata pentru ceai
class Tea_Drink extends Drink {

    // ingrediente pentru ceai
    protected $ingredients = array('tea', 'sugar', 'mink', 'water');

    // generare ceai
    public function MakeDrink() {

        // fa ceai
    }
}

// clasa derivata pentru Bloody Mary
class BloodyMary_Drink extends Drink {

    // ingrediente Bloody Mary
    protected $ingredients = array('votka', 'salt', 'tomato juice');

    // generare Bloody Mary
    public function MakeDrink() {

        // fa BloodyMary

    }
}

Idea este de a avea o clasa abstracta care va fi extinsa intr-un mod cat mai simplu pentru a genera noi clase factory.

PHP 5

In PHP 5 clasa ar arata cam asa:

// clasa Factory abstracta
abstract class absFactory {

    // numele clasei de baza
    static protected $base_class = '';

    // metoda factory
    public static function getInstance($type) {

        // numele clasei rezultat
        $class_name = $type . '_' . self::$base_class;

        // se testeaza daca clasa exista
        // aici se poate adauga si un autoloader eventual
        if(!class_exists($class_name)) {
            throw new Exception( 'Class ' . $class_name . ' not loaded!');
        }

        // se verifica daca clasa mosteneste clasa de baza
        if(!is_subclass_of($class_name, self::$base_class)) {
            throw new Exception(
                'Class ' . $class_name . ' is not a child of ' . self::$base_class
            );
        }

        // noul obiect
        return new $class_name;

    }

}

Pentru ca metoda getInstance este statica si proprietatea este statica.

Daca incercam:

class DrinkFactory extends absFactory {

    static protected $base_class = 'Drink';
}

try {

    $obj = DrinkFactory::getInstance('Tea');

} catch (Exception $e) {

    echo $e->getMessage();
}

Output-ul va fi:

Class Tea_ not loaded!

Din pricina “self”, nu putem apela pur si simplu metoda getInstance() din clasa copil pentru ca valoarea lui $base_class va fi “” in loc de “Drink”, trebuie suprascrisa metoda getInstance(). Lucru prea “complicat”.

O versiune functionala in PHP 5 ar fi:

class DrinkFactory extends absFactory {

    public static function getInstance($type) {

        self::$base_class = 'Drink';

        // metoda factory a clasei factory de baza
        parent::getInstance($type);

    }

}

try {

    $obj = DrinkFactory::getInstance('Tea');

} catch (Exception $e) {

    echo $e->getMessage();
}

Dar nu mi se pare tocmai “elegant”.

PHP 5.3

Aici avem “Late static bindings”, care in principiu este introducerea cuvantului “static”.

Clasa de baza factory arata cam asa:

// clasa Factory abstracta
abstract class absFactory {

    // numele clasei de baza
    static protected $base_class = '';

    // metoda factory
    public static function getInstance($type) {

        // numele clasei rezultat
        $class_name = $type . '_' . static::$base_class;

        // se testeaza daca clasa exista
        // aici se poate adauga si un autoloader eventual
        if(!class_exists($class_name)) {
            throw new Exception( 'Class ' . $class_name . ' not loaded!');
        }

        // se verifica daca clasa mosteneste clasa de baza
        if(!is_subclass_of($class_name, static::$base_class)) {
            throw new Exception(
                'Class ' . $class_name . ' is not a child of ' . static::$base_class
            );
        }

        // noul obiect
        return new $class_name;

    }

}

Diferentele fata de PHP 5 sunt marcate cu bold. O schimbare atat de mica permite totusi o clasa factory mult mai “atragatoare”:

class DrinkFactory extends absFactory {

     static protected $base_class = 'Drink';

}

try {

    $obj = DrinkFactory::getInstance('Tea');

} catch (Exception $e) {

    echo $e->getMessage();
}

Practic in aceasta varianta nu se inlocuieste decat proprietatea statica relevanta in acest context.

Written by Claudiu Persoiu

24 January 2010 at 5:46 PM

Posted in Design patterns,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 , , , , ,

E decembrie iar PHP6 inca nu este aici…

without comments

Este decembrie, frigul a venit, vitrinele magazinelor sunt pline de decoratiuni de Craciun iar PHP6 inca nu este aici… poate anul viitor…

Se pare ca versiunea 4 a fost cea mai populara versiune de PHP, PHP5 a avut viteza cea mai mica de penetrare in piata iar PHP6… cea mai asteptata.

Dupa cum sunt schitate lucrurile, PHP6 nu o sa aduca o schimbare atat de mare cum au adus versiuniile precedente, mai degraba o sa aduca schimbari calitative, probleme vechi vor fi rezolvare, REGISTER GLOBALS o sa dispara de tot, la fel si Magic Quotes, care nu este o problema atat de mare de securitate cat de performanta. Vechea si alta data populara gama de functii ereg vor disparea in favoarea preg, aceasta din urma fiind mult mai rapida. Pe de alta parte, cel mai mare avantaj o sa fie suportul pentru Unicode.

Pana atunci exista totusi versiunea de test, iar versiunea finala initial se credea ca o sa fie lansata in 2007, iar acum la finalul lui 2008 este inca in lucru.

Dar intre timp pe 4 decembrie pe site-ul PHP.net, a fost lansata versiunea 5.2.7. Totul bine si frumos, pana pe 7 decembrie cand a fost retrasa pentru ca Magic Quotes nu mai functiona. Sfatul era asteptarea versiunii 5.2.8. A doua zi aceasta a fost lansata, oricum nu cred ca cineva care se grabea sa faca update folosea si Magic Quotes pe on.

Iar acum ma retrag in liniste sa o astept… poate anul viitor…

Written by Claudiu Persoiu

12 December 2008 at 8:26 PM

Posted in PHP

Tagged with , ,

ZCE – un nou episod

with one comment

Dupa ce am sustinut cu ceva timp in urma examenul de certificare ZCE in PHP5, intr-un final a venit si plicul cartonat care il asptetam cu atata nerabdare.

O data cu plicul am descoperit si de ce a durat atat, pe el scria mare Russian Federation, Bucharest. Pe aproape dar nu tocmai bine.

Diploma e foarte draguta (mai ales dupa ce am asteptat-o atat), cu timbru embosat si semnaturile lui Zeev Suraski si Andi Gutmans, fondatorii Zend. In plic mai era si o pagina cu avantajele care le ai ca ZCE si un abtipild maricel cu ZCE PHP5.

Cu acestea fiind spus episodul ZCE PHP5 ia sfarsit… pana la urmatoarea certificare.

Written by Claudiu Persoiu

14 November 2008 at 9:46 PM

Posted in Diverse

Tagged with , ,

Zend framework certification

without comments

De putin timp Zend a lansat programul Zend Framework Certification. In cadrul programului de certificare, utilizatorul are la dispozitie manualul de referinta, ghidul de studiu, training si un voucher pentru examenul de certificare (si sa nu uitam un tricou foarte interesant 🙂 ).

Avantajele certificarii sunt aceleasi ca si la ZCE in PHP5.

Totusi fata de programul de certificare in PHP5, acest program are cateva lucruri diferite, cum ar fi:

PHP5 Zend framework
– este universal valabila pentru toti cei care fac programare in PHP5 – este folositoare doar celor care lucreaza cu… ZF
– este universal – exista si alte frameworkuri
– trecerea la alte versiune nu implica decat cunoasterea diferentelor – trecerea la alt framework greoaie

Trecand peste aceste diferente, atitudinea Zend este una bine venita, pana la urma atrage dupa sine un standard pentru in frameworkuri. Problema este ca nu sunt universal valabile, pana la urma chiar daca nu toti folosim un framework de pe piata, avem tendinta sa ne construim propriul framework.

Invatarea unui astfel de framework are totus avantajul de a oferi o noua perspectiva asupra lucrurilor, ne ajuta sa ne construm o imagine mai clara la ce trebuie sa ne asteptam de la frameworkul folosit. Pe de alta parte, un framework cum este Ruby on Rails a inspirat la randul lui multi programatori in modul cum un framework ar trebui construit, acesta avand echivalente in limbaje cum ar fi Java si evident PHP, fara ca multi dintre ei sa migreze la el. Si ce se intampla daca acum te certifici in el iar apoi te implici in proiecte care folosesc alte frameworkuri?

Pana la urma aceasta este tendinta, asa cum programarea obiectuala a oferit o perspectiva noua pentru refolosire fata de programarea procedurala, asa un framework are tendinta sa aduca programarea orientata obiect la un alt nivel, sporind gradul de refolosire al codului. Dar… doar Zend Framework este solutia?

Written by Claudiu Persoiu

28 September 2008 at 10:51 AM

Posted in Web stuff

Tagged with , ,

Zend PHP5 Certified Engineer

without comments

Si a venit si momentul examenului (a si trecut). Dupa poate ceva mai putin timp decat ar fi trebuit pentru studiu, in ultima zi de concediu am decis sa sustin examenul.

Taxa am platit-o direct la Zend cu un card Visa Electron. Apropo, sa nu faceti aceeasi gresala ca mine, nu incercati sa platiti cu alt card decat cel personal! Am avut aproximativ 5 incercari, doua telefoane in Germania si unul in USA am ajuns sa-mi fac card pentru a cumpara examenul si alte cateva produse! Evident exista si alte metode de plata, dar nu la fel de rapide.

Cand am ajuns la programare, a fost deosebit de simplu, poate prea simplu pentru mine. Totul a mers conform planului, m-am programat si am asteptat ziua examenului.

Ziua examenului. Pentru ca nu aveam nici cea mai mica idee unde se afla centrul ales de mine din cadrul complexului Facultatea de Drept Bucuresti, am decis sa dau un telefon preventiv… nici un raspuns, am mai incercat, era suficient de tarziu cat sa fie cineva acolo si totusi… nici un raspuns.

Am hotarat sa ma duc acolo. Nu mica mi-a fost surpriza cand nimeni nu a auzit de Pearson VUE, iar cand spun asta nu ma refer la femeile de servici care tineau locul de portarului, ci la cei care raspund la telefonul de pe site. Dupa suficiente legaturi din centrala am gasit si centrul (undeva in dreapta) este de fapt un centru CISCO afiliat Person VUE.

Examenul a fost exact asa cum a fost descris pe site, singur in sala, fara obiecte personale, iar acelea care poti sa le iei cu tine in sala de examen nu pot sa le scoti. Examenul este supravegheat cu o camera, care ma facea sa cred ca voi auzi “zzz, zzzz” in timpul examenului de la zoom, dar nu a fost asa.

Examenul, asa cum scrie si in manualul de la Zend, se bazeaza pe experienta cu PHP. Trebuie sa ai cel putin idee de elementele PHP si in special sa ai ochiul format pentru debuging. Cum era de asteptat se analizeaza mai mult elementele atipice de implementare, functii standard PHP si mai putin capacitatea de a scrie cod, dar pana la urma este grila, nuprea aveau cum sa faca altfel. Examenul nu mi s-a parut foarte dificil, dar nici simplu. Se vede clar experienta cu PHP in intrebari, se vede cine s-a “jucat” si cine nu.

La finalul examenului, mi-a aparut “Congratulations you have passed the exam”, sau ceva de genul asta, eram prea fericit ca sa mai memorez.

A doua zi lucratoare am avut si profilul completat pe site, desi puteam sa-l editez la cateva ore de la terminare (de cand am ajuns acasa).

Acum astept diploma care se trimite prin posta, cred ca asta se trimite din Israel deci… o sa fie un cadou frumos de Craciun probabil…

Am uitat sa amintesc de “mock” testele pentru examen. Desi am primit la pachet 10, nu am folosit decat 3, iar cu fiecare test facut scorul a crescut. Din pacate motivul pentru crestere este ca intrebarile se repeta (nu toate dar suficiente) si nici macar nu le-am regasit in examen, forma este asemanatoare, dar diferentele sunt mari in continut. Va sfatuiesc sa nu luati pachete mari pentru ca rezultatele nu o sa mai fie relevante dupa primele teste.

Am citit pe alte bloguri care testul este mai ushor decat examenul. Eu nu am aceeasi parere, gradul de complexitate este de fapt similar, doar intrebarile deosebit de stufoase nu se regasesc in examen, in rest sunt similare.

Written by Claudiu Persoiu

17 September 2008 at 8:36 PM

php|architect’s Zend PHP5 Certification Study Guide – 2nd Edition

with 2 comments

php|architect’s Zend PHP5 Certification Study Guide – 2nd Edition, sau mai exact ghidul recomandata de Zend pentru sustinerea testarii in vederea obtinerii ZCE PHP 5.

O carte subtirica pentru un limbaj peste 1000 de functii (var_dump(get_defined_functions()); – 1297 in versiunea mea), dar exista o explicatie, aceasta carte NU ESTE UN MANUAL! este doar un ghid, manualul il cunoastem deja, se gaseste pe site-ul php.net.

Este o carte foarte interesanta, cel putin a fost pentru mine. Aceasta atinge practic toate subiectele posibile in cadrul examenului de certificare, dar NU le trateaza in detaliu. Daca intentionati sa studiati pentru certificare folosind aceasta carte, trebuie sa aveti manualul aproape, pentru ca nu se gasesc toate explicatiile in carte.

Pe alocuri mai sunt greseli, chiar daca este a doua editie, lucru care mi se pare bizar. Din fericire ele sunt destul de usor de reperat.

Editia a doua mai trateaza doua noi subiecte, respectiv PDO si mysqli. Chiar daca sunt tratate pe scurt, eu am mai gasit lucruri care nu le stiam in aceste capitole (ma indoiesc ca erau critice pentru a trece examenul, dar cred ca sunt utile pentru experienta mea).

Pana la urma este o carte interesanta, si nu de putine ori citind ma gandeam “nu stiam ca se poate face si asa”.

Eu am cumparat-o de la Zend, o data cu certificarea, un set de 10 teste si doua tricouri (php geek fashion 🙂 ), am ales livrarea prin posta, pentru ca era mai putin de jumatate fata de DHL si surpriza, pachetul a venit la doar o saptamana de cand am fost anuntat ca a plecat! Evident pachetul a venit de la un centru apropiat (element 5 Germania), desi initial ma gandeam ca o sa fie livrat din SUA sau Israel si o sa fie un frumos cadou de Craciun.

Written by Claudiu Persoiu

17 September 2008 at 7:21 PM

Posted in Diverse,Web stuff

Tagged with , , ,

O carte pentru PHP 6

without comments

Chiar daca PHP 6 nu este gata inca, sau mai bine zis mai are destul pana va ajunge la varianta finala, deja am gasit o carte dedicata noii versiuni avand titlul PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide.

Schimbarile care vor avea loc in cadrul PHP 6 sunt deja cunoscute, iar versiunea CVS este disponibila.

Avand in vedere cele de mai sus, se poate crede ca aceasta carte se grabeste sa anunte venirea, pentru ca cititorul sa aiba parte de o abordare a noii versiuni.

Am avut ocazia sa rasfoiesc versiunea in romana a cartii PHP si MySQL pentru site-uri WEB dinamice. Pe spatele cartii sunt bifate nivelurile “Incepator”, “Mediu” si “Avansat”. Cu toate acestea cartea pare mai mult o adaptare a cartii pentru versiunea 4 la versiunea 5, totusi fara a se atinge aproape de loc (sau chiar de loc) aspecte cum ar fi POO, XML, Streams sau abordari prea succinte pentru elemente complexe cum ar fi array-urile. Intradevar cartea nu se pierde in multe detalii iar la final exista prezentate cateva exemple concrete.

Pe Amazon.com se pot rasfoi cateva pagini din carte, din pacate editia precedenta chiar si catii de PHP 5 si se poate vedea ca nu au fost prea multe schimbari in cuprins cel putin, evitand abordari detaliate pentru subiecte care au constituit modificari majore intre versiuni.

Concluzionand eu unul nu ma astept decat la o carte adaptata usor la modificarile care au avut loc de la ultima versiune si nici de cum la o carte orientata spre noua versiune, gata sa evidentieze noile facilitati introduse (sau cele eliminate) in versiunea 6 a PHP. Probabil lansarea timpurie a cartii nu este decat o politica de marketing.

Written by Claudiu Persoiu

14 September 2008 at 6:28 PM

Posted in Diverse,PHP

Tagged with , , , ,