Protože mě zajímá, jakým směrem se PHP vyvíjí, sleduji konferenci PHP Internals. V poslední době se např. probíralo, jestli bude v PHP operátor goto (srpen 2004, asi 200 zpráv), jestli se zjednoduší práce s neinicializovanými proměnnými a jak se to bude dělat (červenec 2004, asi 100 zpráv) nebo jak se bude přistupovat k databázím (naposledy únor 2005, asi 40 zpráv).
Do konference většinou nepřispívám, protože na vývoji kódu PHP se přímo nepodílím a zprávy ostatních lidí, kteří si myslí, že mají patent na rozum, diskuse obvykle pouze znehodnocují. Z tohoto důvodu bohužel např. nevím, jak to dopadlo s operátorem goto, protože po asi padesáti zprávách tohoto druhu jsem diskusi přestal sledovat. Pro lidi s nedostatkem času proto vychází i PHP Weekly Summary, kde jsou probíraná témata jednak stručně popsána a jednak i celkem trefně komentována – viz např. shrnutí operátoru goto. Tento přehled má ale oproti skutečnému dění bohužel obvykle dost velké zpoždění.
Co si o goto myslím já? V rukou experta by jistě mohl přispět ke zpřehlednění a zelegantnění kódu, ale v rukou nováčka by mohl způsobit nedozírné škody. Proto jsem spíš toho názoru, že v tak rozšířeném jazyce, jako je PHP, bude lepší se bez něj obejít.
Speciální konstrukce pro práci s neinicializovanými proměnnými by PHP podle mě prospěla jako sůl, porovnejte např. následující kód:
<?php // současná verze echo '<input name="search" value="' . (isset($_GET["search"]) ? htmlspecialchars($_GET["search"]) : "") . '" />'; // s novou konstrukcí echo '<input name="search" value="' . htmlspecialchars(ifnull($_GET["search"], "")) . '" />'; ?>
U této konstrukce se vše pokud vím zaseklo hlavně na vybrání správného názvu. Někdo navrhuje ifnull, někdo ifsetor (to myslím nakonec vyhraje), někdo coallesce. Podle mě to je jedno, hlavně ať už něco je – nejlepší se mi zdá ifnull, někdo ale poukazuje na drobné odchylky od IFNULL známého z databází.
Cris přišel s řešením, jak funkci ifsetor implementovat v user-landu:
<?php function ifsetor(&$var, $default = null) { return (isset($var) ? $var : $default); } $var = ifsetor($_GET["var"], ""); ?>
Tato funkce má dvě drobné nevýhody: pokud je druhý parametr volání funkce, zavolá se tato funkce, ať je proměnná nastavená nebo ne, a předávaný parametr (v ukázce $_GET["var"]
), který nebyl v době volání nastaven, bude mít po zavolání funkce hodnotu null. Myslím, že když o těchto nedostatcích člověk ví, dá se s nimi žít.
Co se jednotného přístupu k databázím týče, jsem zvědav na PHP 5.1.0, k němuž by mělo být přiloženo rozšíření PDO. Nejedná se o projekt snažící se obsáhnout všechny možné konstrukce různých databází do jednoho funkčního rozhraní jako je např. ADOdb nebo PEAR DB, jedná se naopak o nízkoúrovňový přístup k databázím s ambicí nahradit většinu extenzí jako MySQL nebo SQLite, kde bude implementována pouze základní množina funkcí a u jednotlivých databází ty pro ně specifické. Protože nemám rád molochy, tak jsem zvědav, jestli se PDO ujme.
Diskuse je zrušena z důvodu spamu.