Mirin webspace

Nejbohatší život má ten, kdo žije s minimem nároků

3. 12. 2009 - Komentáře (2) PHP

Co nás možná čeká v PHP 6

Trochu se divím, že se zatím nikdo moc nezmiňoval o proběhlém php core developer summitu v rámci akce php|tek 2009 v květnu tohoto roku. Šlo o dva dny a php vývojáři se sešli na půdě pobočky Microsoftu :-). Probíraly se témata týkající se nadcházejících vydání PHP 5 (5.3, 5.4) a PHP 6. Probíraly se i problémy, které brzdily v té době ještě připravovanou verzi 5.3, ty už by tedy měly být aktuálně vyřešeny.

Unicode

V prvním dni se probíralo hlavně unicode. Spousta věcí na Unicode ještě není hotova. Velký kus práce je třeba udělat na PDO, některé api access knihovny mají přímo zabudovanou podporu pro unicode, jiné ne. Databáze (resp. jejich dřívější verze), jejichž access API nemají podporu konverze znakových sad asi nebudou vůbec do PDO zahrnuty. PDO na unicode obecně není připraveno.

Další věci související s unicode:

  1. PHP parser sám o sobě nerozumí UTF-16 kódování
  2. Problémy jsou zatím s podporou unicode u globálního pole $_SERVER, cookies, sessions, filter extenze.
  3. Není uspokojivě vyřešena normalizace názvů tříd a identifikátorů.
  4. String konverze uvnitř Zend Engine nejsou optimální, týká se i operátoru []

Ostatní změny v engine

Další věci už s unicode nesouvisí. Stačí shrnutí v bodech.

  1. PDO bude preferovaným DB interfacem pro PHP. Z ostatních by měly zůstat mysql, mysqli, pgsql, sqlite3, oci8.
  2. Extenze mbstring nebude umožňovat přímou integraci s enginem (zástupce strlen apod.), ale bude dále součástí core PHP.
  3. Je potřeba fixnout spoustu valgrind hlášek (memory leaks) a nefunkční testy.
  4. Testovací aplikace pro PHP 6 budou Wordpress, Drupal, Wikimedia a frameworky ezComponents, Zend Framework.
  5. Short tags definitivně zůstává.
  6. Více tlačit na používaní filter extenze, lidi to moc neznají a nepoužívají.
  7. Rezervovat si namespace "PHP" :-).

A teď zajímavější věci:

  1. Začíná se uvažovat o case sensitive pro identifikátory - názvy tříd, proměnné atd.
  2. Traits (kompozice tříd nahrazující vícenásobnou dědičnost), pokud bude reálně použitelný patch.
  3. Podpora vynucení návratového typu funkcí a s tím související podpora skalárních typu (int, string, bool) u vynucování parametrů funkcí. Opět je třeba funkční patch od komunity.
  4. Řešit callback podobně jako jsou teď closures (internal třídou), vylepšit fungováni closures s třídami.
  5. Možnost automatického volání konstuktoru předka.
  6. Vyhazovat exception pro nevalidní parametry při volání funkcí.
  7. Magic metoda __cast() pro přetypování.
  8. Read only pro členské proměnné tříd a možná normální proměnné, urychlilo by to zejména věci ohledně DB.
  9. Objekty třídy ArrayObject, resp. ArrayAccess by měly být akceptovány všude, kde je akceptováno klasické pole.
  10. Něco na způsob safe_mode, ale lepší :-)
  11. Function call chaining, když už je funkce plnohodnotným typem/objektem - f()() - pokud f() vrací funkci.
  12. Array dereferencing, pokud funkce vrací pole - f()[0].
  13. Property ve stylu C#, syntaxe asi ve stylu:
  class Foo {
     public $bar
         getter { return $this->bar; }
         setter { $this->bar = strtolower($value); }
     ;
   }
 

Je RFC, ale patch zatím žádný.

  1. Podpora vnořování ini souborů.
  2. Statické třídy - pokud bude nějaký rozumný use case a patch.
  3. Striktní třídy - zakázat vytváření dynamických členských proměnných (nepovolí $this→foo = bar;), patch zatím žádný.
  4. Odstranění final z členských proměnných Exception tříd.

Některé věci z tohoto by se možná mohly objevit ještě v PHP 5.

Na php wiki jsou i některé další věci, ale to výše zmíněné je asi nejzajímavější. Co na to říci? Zní to zajímavě, ale bůh ví, kdy se alespoň zlomku toho v PHP dočkáme a jak to ovlivní "pomalost" PHP, a hlavně jak bude zajištěna zpětná kompatibilita :-).


Komentáře (2)

  1. David Grudl - 4. 12. 2009 23:34

    Nevěřím ničemu :?)) Tohle se objeví až v PHP 6.3, která vyjde za deset let.

  2. snop - 16. 12. 2009 14:48

    Moc zajimave zmeny

Komentáře jsou uzavřeny.