Webstack
Bejelentkezés

Elfelejtetted a jelszavad?

Nem vagy még tag? Kattints ide és regisztrálj most!

PHP 5.4 újdonságok

PHP | tomizej  | 2012-09-19 02:26:12

Történet

Megjelent a PHP 5.4 es verziója. Sok hír keringett mostanság, hogy nem fog fejlődni többet a PHP, nem lesz érdemes rá alapozni. Azért ne felejtsük el, hogy a világ egyik legnagyobb oldalai PHP nyelven íródtak, illetve a jelenleg futó siteok több mint 80%-a, úgyhogy szerencsére ennek nincs valóság alapja. Az viszont tény, hogy a PHP 5.3 kiadása óta (2009. július) nem igazán volt komolyabb frissítés. Azonban most itt az 5.4, rengeteg hasznos új funkcióval bővült a készlet, új nyelvi elemek, sebesség és memóriahasználat optimalizálás (közel 20%-os teljesítmény növekedés). Emellett sok, már elavult funkció ki lett véve.

Újdonságok

Az újításokból csakhogy párat felsoroljak: traitek, tömb literálok, beépített webszerver és még sok más. Az 5.4-ben közel 100 bugot javítottak és nagy teljesítmény optimalizáláson ment keresztül.

Néhény az elavult funkciók közül, amit elfelejthetünk: register_globals, magic_quotes, safe_mode.

Unicode támogatás

Az egyik legfontosabb azonban, hogy teljes körű Unicode támogatást kapott a nyelv az alapértelmezett kódlap ISO-8859-1 –ről UTF-8 ra módosult. Így a továbbiakban már nem szükséges például HTML-ben az eddig már rutinná vált charset meta taget utf-8-ra állítani (Content-Type: text/html; charset=utf-8), illetve nem kell headerekkel beállítani a karakter kódolást, ez pusztán alapértelmezett lesz nyelvi szinten.

Trait

A Trait jelentése (jelleg, jellemvonás, jellegzetesség). A Traitek célja a horizontális kód újrahasznosítás. A PHP egyszeres öröklődést támogató nyelv. Egy gyerekosztálynak csak egyetlen őse lehet. A Traitek lehetőséget nyújtanak a fejlesztőnek, hogy az egyszeres öröklődés mellett metódusok halmazát felhasználhassák különböző egymástól független osztályokban. Egy Trait hasonlít egy osztályhoz, azonban csak függvényeket csoportosít, nem örökölhet. Nem példányosítható, csak felhasználható az osztályokban (gyakorlatilag a nyelv által biztosított copy&paste).

A legjobb felhasználási módja, ha több osztályban kell megvalósítani ugyanazt a viselkedéseket.

Az alábbi példában 2 viselkedést használunk fel különböző egymástól független osztályokban. Első körben definiáljuk a 2 Traitet: CanWalk és CanFly. Majd létrehozunk 2 osztályt a Majom és a Sast. A majom tud járni, tehát a use kulcsszóval használjuk a CanWalk Traitet, így gyakorlatilag olyan mintha bemásoltuk volna a kódot. És nem sértettük meg DRY (Dont repeat yourself) „Ne ismételd magad” alapelvet sem.

A sas tud járni és repülni is, így mindkét Traitet használhatjuk, ezen a ponton jön előtérbe a Traitek használatának előnye az egyszeres öröklődés mellett.

trait CanWalk {
    public function walk() {
        echo 'Járok';
    }
}
 
trait CanFly {
    public function fly() {
        echo 'I believe i can fly, i beleive i can touch the sky :)';
    }
}
 
class Majom {
    use Walk;
}

class Sas {
    use Walk, Fly;
}

 
$majom = new Majom ();
$majom ->walk();

$sas= new Sas();
$sas->walk();
$sas->fly();

Dereferencia képzés tömböknél

Nem kell többet segédváltozót használnunk, ha egy függvény visszatérési értéke egy tömb és nekünk csak bizonyos elemére van szükségünk.
Pl.: Ez egy url paraméter, és mi most csak az országra vagyunk kíváncsiak (2. paraméter):

$orszag = explode('/', ’last-minute/egyiptom/nyaralas-123’)[1];

Asszociatív tömbök esetén is hasonló a működés, példa egy saját függvény esetén:

function() kor() {
	return array(’Pista’ => 23, ’Lajos’ => 14);
}
//Hány éves Lajos?
echo kor()[’lajos’];

Tömb literálok

A már Javascriptből ismert tömb létrehozás módszert használhatjuk PHP-ben is.
Eddigi módszer:

$nevek = array('Pista', 'László', 'Béla');

PHP 5.4-ben:

$nevek= ['Pista', 'László', 'Béla'];

// asszociatív tömböknél
$array = [
    'nev' => 'Pista',
    'kor' => '12'
];

Az osztály metódusokhoz példányosításkor is hozzá lehet férni

$article = (new Article)->setTitle('Cikk címe')->setImg('http://valami.hu/cikk.jpg');

Hasznos elemek a szerver tömbbe

Tipikus probléma, ha ki szeretnénk számolni a futási időt. Saját magunknak kellett hegeszteni hozzá kódot. Azonban a PHP 5.4-ben a szerver tömbbe $_SERVER['REQUEST_TIME_FLOAT'] tárolva van a script futás idő kezdete mikro szekundum pontossággal. Ebből egyszerűen kiszámolhatjuk a futási időt.

echo 'Futás idő:’.(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']).’microsec’;

PHP Short tag biztonság

Kifejezetten a templatekben jelent nagy előnyt, hogy a php short tageket biztonsággal használhatjuk. Alapértelmezetten elérhető és engedélyezve van PHP 5.4-ben.
Fejlesztők körében átláthatóbb kódot és kevesebb gépelést jelent az alábbi kódot használni

Ez helyett:

<p><?php echo $cim; ?></p>

Ezt:

<p><?=$cim;?></p>

 

Objektum támogatás anonymus függvényekben (clousure)

A PHP 5.3-al bejött az anoymus függvények lehetősége (más néven "clousure"). Eddig nem volt mód osztályon belül az aktuális példányra hivatkozni. Azonban az 5.4-ben, ha egy osztályban lett definiálva névtelen függvény, hozzáférhet az aktuális példányhoz a $this referencián keresztül. Az alábbi példa ezt reprezentálja.

class Test
{
    function hello() {
        echo 'Hello World!';
    }
    function anonymous()
    {
        return function() {
            $this->hello(); // $this nem működött 5.4 alatt
        };
    }
}
class Test2
{
    function __construct(Test $o) // objektum típus megadás (typehint)
    {
        $x = $o->anonymous(); // Test::hello()
        $x(); // meghívja a Test::hello() metódust
    }
}
new Test(new Test2); // kimenet: Hello World!

Közvetett függvényhívás tömbbel

Létrehozhatunk "hívható tömböket", korábban a call_user_func_array() függvény hívásánál volt ismerős a tömb szerű paraméterezés.

Ha tömb első eleme objektum, második pedig egy metódus neve string formában, ez esetben egy hívható (callable) tömbről beszélünk. Az alábbi példakódban látszik, hogyan hívhatjuk meg a Cikk objektum, ár lekérdező metódusát tömb szerűen.

$f = [new Article("c-123"), 'getPrice'];
echo $f(); // Article->getPrice()

Szerző: tomizej

címkék
Címkék: php,

Hozzászólások

tomizej
2012-11-19 08:59:11

hello

Hozzászóláshoz be kell jelentkezni!

Keress minket Facebookon
Ajánlások