Neskatoties uz to, ka liela daļa izstrādātāju vēl tā īsti nav ieskrējušies un sākuši izmantot PHP5 un tā jaunās iespējas, PHP izstrādātāji nesnauž un ir jau ķērušies klāt PHP 6. versijas plāniem.

Novembra sākumā Parīzē kopā sanāca bariņš ar PHP izstrādātājiem un visādi citādi PHP attīstībā ieinteresētiem cilvēkiem un apspriedās par nākotnes plāniem. Ar viņu pilno darba rezultātu var iepazīties šeit: http://www.php.net/~derick/meeting-notes.html. Ja nu negribas lasīt visu sarakstu un meklēt, kas tad īsti ir jauns, piedāvāju nelielu ieskatu, manuprāt, interesantākajos un būtiskākajos momentos.

Unicode atbalsts

Tiek domāts par to, kā noorganizēt pilnīgu unicode atbalstu PHP vidē. Būtībā ir izveidojusies diezgan absurda situācija – ja cilvēks strādā ar parastām teksta virknēm kādā no lokālajiem kodējumiem, jāizmnato vienas funkcijas, bet ja tiek izmantots kāds no universālajiem kodējumiem, tad jāizmanto cita funkciju saime. Tur klāt vēl nāk nianses, ka ne visas teksta virkņu apstrādes funkcijas ir pieejamas arī multibyte teksta virknēm.

Tad nu PHP izstrādātāji PHP 6. versijā plāno pēc iespējas minimizēt dublējošos funkciju skaitu, atvieglot darbu izstrādātājiem, kas izvēlas strādāt ar Unicode paveidiem.

Šobrīd tiek domāts arī par to, kā atslēgt Unicode režīmu, jo ar ieslēgtu pilnu unicode atbalstu, PHP aplikācijas kļūst praktiski par 25% lēnākas un diez vai būs daudz hostinga pakalpojumu sniedzēju, kas tā vienkārši ņems un instalēs jaunāku PHP versiju, kas būs automātiski par 25% lēnāka.

Funkcionalitātes attīrīšana

PHP savā pastāvēšanas vēsturē ir iekrājis diezgan pamatīgu iespēju bagāžu. Kā jau jebkurā lietā, kas attīstās, atsevišķas lietas noveco un vairs netiek lietotas. PHP izstrādātāji ir izšķīrušies PHP versijā veikt nevajadzīgo un nevēlamo iespēju noņemšanu. Pilnībā tiks atmestas šādas lietas:

  • register_globals – jau no PHP 4.2 laikiem noklusētais register_globals uzstādījums ir izslēgts. Būtībā tas ir izslēgts drošības apsvērumu dēļ, pie tam arvien vairāk pieņemoties spēkā CSRF uzbrukumiem, ieslēgts register_globals un nepareiza programmēšanas pieeja rada arvien vairāk problēmu.
  • magic_quotes – magic quotes rada mākslīgu drošības iespaidu. Tā vietā tiks ieviests input filter mehānisms, kas piedāvās filtrēt ienākošos datus, nevis vienkārši akli tos sagatavot nekļūdīgai ievietošanai datubāzē. Magic quotes lietošana būtībā rada viltus drošības iespaidu – mums liekas, ka mēs esam pasargāti no SQL injekcijām, taču tajā pašā laikā mēs aizmirstam, ka ir vēl neskaitāmi daudz citu paņēmienu, kā bojāt dzīvi programmatūras izstrādātājam. Tiek aizmirsts pārbaudīt, vai mainīgie satur skaitļus vai citas atļautās vērtības, viss tiek vienkārši mests datubāzē vai kur citur. Input filter mehānisms liks vairāk aizdomāties vai ienākošie dati tiešām ir tie, kas ir vajadzīgi un derīgi.
  • safe_mode – šis uzstādījums dod teorētisku papildus drošību PHP lietotājiem, taču tajā pašā laikā tiek radīti arī pārāk lieli ierobežojumi pamata funkcionalitātei. Kaut vai klasiskais ierobežojums uz direktoriju veidošanu – ja ir ieslēgta safe_mode, tad izveidojot direktoriju, tam pašam scenārijam nav iespēju izveidot tajā arī failu. Ņemot vērā faktu, ka tiek noņemta safe_mode funkcionalitāte, hostinga pakalpojumu sniedzējiem nāksies izglītoties un nodrošināt klientu scenāriju drošību citiem līdzekļiem. Praktiski jau šobrīd ir iespējams nodrošināt identisku drošības līmeni safe_mode piedāvātajam, neizmantojot tieši šo uzstādījumu.
  • zend.ze1 savietojamība – PHP 5 līdz ar jaunā objektu modeļa ieviešanu tika jau pašā pamatā izmainīta mainīgo vērtību piešķiršana. Ja PHP 4 visiem mainīgajiem tika veidotas kopijas, tad PHP 5 jau visi objekti tika padoti pēc norādes. Lai izstrādātājiem varētu piedāvāt vienkāršāku pāreju no PHP 4 objektu modeļa uz PHP 5 objektu modeli, tika ieviests uzstādījums, kas ļāva saglabāt PHP 4 pieeju objektu kopēšanā. Tā kā PHP 6 vēl ir ejams ļoti tāls ceļš līdz pat pašai pirmajai publiskajai alfa versijai, tad tikmēr programmētājiem tomēr nāksies apgūt jauno PHP objektu modeli un nebūs vairs iespoēju ieslēgt PHP 4 raksturīgo funkcionalitāti..
  • freetype1 un GD1 atbalsts – tā kā ir jaunākas un modernākas šo programmatūras komponenšu versijas, tad atbalsts tiek izņemts.
  • register_long_arrays – jau kādu brīdi šī funkcionalitāte ir īpaši jāieslēdz konfigurācijas failā, lai to varētu izmantot. Tā kā tā skaitās novecojusi un jau šobrīd tiek reti izmantota, tad PHP 6 no tās plāno atteikties pavisam. Atbilstošo garo masīvu vietā jālieto $_GET, $_POST, $_COOKIE, utt.
  • break $var – tā kā šī funkcionalitāte īsti nestrādā, tad nav arī iemesla īpaši to paturēt.

Zināmas pārmaiņas ir plānots ieviest arī funkciju izsaukumos. Lai nodrošinātu kaut kādu konsistenci starp funkciju un mainīgo nosaukumu izmantojumiem, ir plānots padarīt reģistr-jūtīgus arī funkciju nosaukumus. Tā kā šobrīd katrs no programmētājiem raksta funkciju nosaukumus, kā vien ienāk prātā, tad jaunās funkcionalitātes ieviešana vēl ir stipri jāapdomā, lai neradītu pārāk lielas problēmas izstrādātājiem.

PECL

  • Līdz ar arvien plašāku XML izmantošanu programmēšanā, XMLReader un XMLWriter ir pieejami un ieslēgti jau bāzes funkcionalitātē
  • Līdz ar PDO ieviešanu PHP 5.1 versijā tiek piedāvāts unificēts veids, kā strādāt ar dažādām datubāzu pārvaldības sistēmām. Līdz ar to būtībā nav īsti vajadzības pēc vecajām datubāžu funkcijām un to paplašinājumiem. Tādējādi PHP 6. versijā kā bāzes funkcionalitāte būs pieejamas tikai PDO funkcijas, taču pēc vajadzības varēs pieslēgt arī vajadzīgās MySQL, MySQLi, utt. bibliotēkas.

Papildinājumi Zend dzinējam

  • Tiks pievienots 64bit integer datu tips. Līdz ar arvien plašāku PHP izplatību, ļoti bieži parādās problēmas ar veselo skaitļu robežām – bieži vien tās kļūst par mazu. Tieši tāpēc papildus vecajam 32bit integer datu tipam tiks pievienots jauns – 64bit integer datu tips.
  • Tiks pievienota “goto” līdzīga funkcionalitāte. Lai arī augstskolas pirmajos kursos intensīvi māca par to, ka “goto” konstrukcija ir ļauna un nevēlama, PHP izstrādātāji laikam domā mazliet savādāk un šīs konstrukcijas iztrūkumu vēlas tomēr labot, pievienojot to break komandai – ar iespēju lekt nevis ārā no cikla vai kontroles struktūras, bet gan vienkārši uz citu vietu kodā. Šobrīd gan nevaru atcerēties nevienu reizi, kad bez šādas funkcionalitātes nebūtu varējis iztikt, taču ja jau lielie gudrie prāti ir izdomājuši, ka tas ir vajadzīgs, tad lai nu tā būtu.
  • ifsetor() operators. PHP izstrādātāji pēc daudziem lietotāju lūgumiem ir padomājuši par iespēju ērtāk pārbaudīt vai noteikts mainīgais ir uzstādīts vai nav un gadījumā, ja tas nav uzstādīts, tad vienkārši piešķirt tam noklusēto vērtību. Tagad PHP sintaksē būs atļauts saīsinātajam if pierakstam nenorādīt vērtību gadījumā, ja izpildās if nosacījums. Izklausās pārāk sarežģīti, tāpēc parādīšu ar piemēru. Ja līdz šim mēs rakstījām:
    $_GET['var'] = isset($_GET['var']) ? $_GET['var'] : 10;

    , tad tagad to pašu varēs pavisam vienkārši rakstīt arī šādi:

    $_GET['var'] = isset($_GET['var']) ?: 10

    Lai arī tas neizskatās īpaši svarīgi, apvienojot šo funkcionalitāti ar jauno input filter mehānismu efekts varētu būt pat ļoti labs.

  • {} vairs nevarēs izmantot lai piekļūtu teksta virkņu simboliem. Sākotnēji pieeja teksta virkņu simboliem tika realizēta caur {}, taču šobrīd šai sintaksei patiesībā vairs nav nekāda iemesla, gluži pretēji, vairums cilvēku izmanto tādu pašu pieeju, kā masīviem – ar [] palīdzību. Tādējādi, lai nodrošinātu konsekvenci, {} lietošana tiks pilnībā atmesta. Tāpat tiks pievienota arī substr un array_slice funkcionalitāte [] elementiem, piemēram, [,2] būs vienāds ar substr($string, 0, 2) vai array_slice($array, 0,2).
  • Diemžēl konsistences uzlabošana nebūs pilnīga. Nevienam nav noslēpums, ka vairākām iekšējām PHP funkcijām ir atšķirīga mainīgo kārtība, kas bieži vien traucē un liek izstrādātājiem praktiski katru reizi ielūkoties dokumentācijā, lai uzzinātu pareizo argumentu secību. PHP izstrādātāji ir nolēmuši šo lietu nemainīt vismaz attiecībā uz masīvu funkcijām.

Objektorientētā funkcionalitāte

Namespaces

Lai arī neskaitāmi izstrādātāji min šo kā vienu no lielajām PHP objektorientētības problēmām, PHP izstrādātāji šo funkcionalitāti ir atzīmējuši ar treknu “ja mēs pievienosim šo funkcionalitāti”, kas liek domāt par to, ka šīs funkcionalitātes parādīšanās vēl nebūt nav noteikta.

Vispārēji papildinājumi

APC cache

APC cache tiks iekļauta PHP 6. versijas bāzes struktūrā, lai nodrošinātu labāku ātrdarbību.

PHP Hardened patch

Lai uzlabotu PHP aplikāciju drošību, PHP 6. versijā tiks iekļauts PHP hardened patch, kas jau šobrīd ir pieejams atsevišķi un piedāvā salīdzinoši labāku PHP aplikāciju pasīvo aizsardzību.

Exceptions

Visa kļūdu apstrāde jāpārveido uz izņēmumsituāciju apstrādi. Būtībā tā ir pieņemta prakse citās programmēšanas valodās un atvieglos darbu ļoti daudziem programmētājiem ar zināšanām citās programmēšanas valodās.

Atmestas dažas no PHP teksta iezīmēm

PHP 6. versijā vairs nebūs pieejamas tādas atvešošās PHP iezīmes kā <% un %>, <script language=”php”></script>. Tāpat vairs nebūs atļauts miksēt dažādas atverošās un aizverošās iezīmes.

Noslēgums

Visā visumā, manuprāt, PHP attīstība iet pareizajā virzienā, mēģinot arvien vairāk vērst uzmanību uz PHP aplikāciju drošību, labo programmēšanas praksi, konsistenci valodas uzbūvē un jaunu iespēju pievienošanu. Apvienojot PHP 6. versiju ar topošo Zend PHP izstrādes ietvaru (framework) PHP nākotne izskatās pat ļoti cerīga. Tad nu atliek tikai savlaicīgi ņemt vērā iespējamās izmaiņas un jau pamazām gatavoties PHP jaunajām iespējām, lai varētu nesāpīgi pāriet uz jaunāku versiju.