Claudiu Persoiu

Blog-ul lui Claudiu Persoiu


Archive for 1 July 2011

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