Rene Saarsoo bio photo

Rene Saarsoo

Väike alatu progeja.

Twitter Facebook Github

PHP – uus ning endiselt nõme :(

Viimati sai rohkem PHP-d kirjutatud ja kirutud siis kui versiooninumber näitas 5.2. Täna on aga värskeim väljalase juba 5.5, mis võrreldes 5.2-ga sisaldab puraka posu uusi featuure, mida mul õnnestus omal käel järele proovida kui katsusin jõudu Titanium Systems OÜ testülesande kallal.

Süntaks massiivide jaoks

Kogu selle aja on PHP progejad vapralt toksinud a, r, r, a, y, (, ) üksnes selleks et uut tühja massiivi tekitada. Nüüd siis viimaks saavad nad kasutada sama süntaksit mida kõik mõistlikud keeled tavaliselt juba versioonist 0.0.1 alates toetavad:

$myArray = [];

Nagu ikka saab lihtsasti teostada ka operatsiooni PUSH:

$myArray[]= 5;

Või massiivide liitmist:

$myArray = [1, 2, 3] + [4, 5, 6];

// TULEMUS: [1, 2, 3], sest + töötab ootuspäraselt vaid
// assotsiatiiv-massiivide puhul, oleks tulnud kirjutada:

    $myArray = array_merge([1, 2, 3], [4, 5, 6]);

Anonüümsed funktsioonid

Hurraa! No viimaks ometi saab kasutada array_filter funktsiooni mõistlikul moel:

$odds = array_filter([1, 2, 3], function($x) { return $x % 2 != 0; });

Ja samamoodi ka array_map puhul:

$squares = array_map([1, 2, 3], function($x) { return $x * $x; });

// VIGA: Parameetrid vales järjekorras:

    $squares = array_map(function($x) { return $x * $x; }, [1, 2, 3]);

Ning siis võime välja kutsuda ka olemasolevaid funktsioone:

$positives = array_map(abs, [-1, 2, 3]);

// VIGA: funktsioonid tuleb edastada stringina:

    $positives = array_map("abs", [-1, 2, 3]);

Või mõne objekti meetodi:

$positives = array_map($math->abs, [-1, 2, 3]);

// VIGA: Meetodid tuleb edastada massiivina:

    $positives = array_map([$math, "abs"], [-1, 2, 3]);

Uuel objektil meetodi välja kutsumine

Varasemal ajal oli probleem, et PHP-s ei saanud kirjutada nii:

new Foo()->someMethod();

Ning selle asemel pidi kasutama koledat vahemuutujat:

$foo = new Foo();
$foo->someMethod();

Nüüd siis lõpuks saame kirjutada nii nagu alati soovinud oleme:

new Foo()->someMethod();

// VIGANE SÜNTAKS: ootamatu '->' operaator.
// Tegelikult peame kirjutama nii:

    (new Foo())->someMethod();

Mugavad vaikimisi väärtused

Ennemalt oli veel üks probleem. Paljudes teistes keeltes sai kasutada || operaatorit, et seada vaikimisi väärtusi, kuid PHP-s andis järgnev kood tulemuseks üksnes true:

$foo = $_POST['foo'] || "default";

Nüüd siis on PHP-s ?: operaator, mis omab sama effekti:

$foo = $_POST['foo'] ?: "default";

// HOIATUS: Defineerimata index 'foo'
// Tegelikult peame kirjutama ikkagi:

    $foo = isset($_POST['foo']) ? $_POST['foo'] : "default";

// või suruma hoiatuse @ operaatoriga maha:

    $foo = @$_POST['foo'] ?: "default";

Nimeruumid

Ja siis muidugi on meil need toredad nimeruumid:

namespace MyProject::Foo;

// VIGANE SÜNTAKS: ootamatu '::'
// Tegelikult tahame me muidugi kasutada seda võrratut
// äraspidi kaldkriipsu:

    namespace MyProject\Foo;

Oh seda sulnist rõõmu küll kogu sellest kompotist.