Děšení na PHP 5.2
Každou další verzi PHP očekávám se zděšením. Vždy trnu, co zase bude jinak. Pak dlouhé hodiny procházím changelog a pročítám PHP Internals, abych pochopil souvislosti.
Od vývoje PHP očekávám především
podporu Unicode a opravení nedostatků objektového modelu. To první nepřijde
dříve než se šestou verzí. To druhé je zcela ve hvězdách. Kdo očekával
od PHP 5.2 late static
binding, byl nejen zklamán (vývojáři to nepovažují za
důležité), ale dokonce dostal facku v podobě zamítnutí abstract
static function. A buďme rádi, že to negeneruje fatal error, bylo to
v plánu.
Že je objektový model PHP děravý jako řešeto, to by tak nevadilo. Chyby lze reportovat. Co však nelze, tak je obhájit. Dohadujte se s arogantním programátorem, který sám píše v neobjektovém jazyce C, o objektech… Já už na to nemám sílu.
Pěkným příkladem je Reflections. V každé „setinkové“ verzi se chová mírně jinak. Mírně jinak blbě, abych byl přesný. Podívejte se třeba, jak vývojáři chápou privátní metody:
class ParentClass
{
private function foo() {}
}
class Child extends ParentClass
{
}
// prozkoumáme třídu Child
$rc = new ReflectionClass('Child');
// má metodu foo() ?
echo $rc->hasMethod('foo'); // vrací TRUE!
Takových nesmyslů se dá najít celá řada. Dosáhnout jejich opravení je však nemožné. Doufal jsem, že za nás budou orodovat programátoři Zend Framework, ale byly to plané naděje.
Co tedy mohou přinést nové verze PHP? Problémy…
Komentáře
» přidat
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.

#1 error414 http://www.error414.com nový
Clanek do me vnesl beznadej a smutek. Zacina to byt cim da horsi a horsi. Jen cekam kdy nasatne ten zlom a PHP se uplne zavrhne, nebo se udela poradne.
Jelikoz vyvojari uz mrvy i opravy tak je cas jim rozbit PC basebalovou palkou.
#2 Hds nový
Ach jo, to je fakt na zbláznění. PHP by mohlo být nádherný jazyk, zároveň jednoduchý i „powerful“, ale tyhle věci ho srážejí na zem… Abych se začal učit Ruby nebo Python.
#3 Michal nový
Pratele, je cas na zmenu – www.djangoproject.com
Jestli mate radi Python, zkuste Django. Narozdil od ROR neni tak prospikovany Javaskriptem a drzi se pri zemi. Pise se v tom hodne pekne a prehledne.
Minimalne za ochutnavku skutecne stoji…
#4 Pavel Richter http://www.pavelrichter.net/ nový
Začíná z toho být trend.
Nová verze: nové chyby a ty staré příliš neopravené. Navíc nasazování těchto verzí na web půjde hodně pomalu … neznalému zákazníkovi je jedno, na čem to jede, hlavně když to jede tak, jak on chce. A nedejbože to nějak měnit :)
No, chtěl bych se kouknout do budoucnosti, jak na tom bude PHP tak za 5let…
#5 Pavel http://www.lasakovi.com/pavel/ nový
Co by dělali programátoři, kdyby vše pěkně šlapalo ? O čem by psali v blozích?
Na druhou stranu dopracovat PHP bude to krasný jazyk, už tak má mnoho přednosti. JAk se říká v jednoduchosti je krása…
<offtopic>Mám pozdravovat od Ing. Petra Nožičky, chemika z Pardubic…#6 Človíček http://weblog.clovicek.net nový
Už by se nad tím opravdu měli zamyslet, přeci by se měli snažit, aby lidi co v php píší měli co nejméně problémů. Takto akorát naštvou spoustu lidí!
#7 David Grudl http://davidgrudl.com nový
#4 Pavel Richter: trendem se stalo vydat verzi a o dva dny později vydat další, opravnou. Vlastně už si to ani jinak nedovedu přestavit.
#5 Pavel: (ad Nožkin) ale, odkud se znáte?
#8 ehmo nový
Uz zmenu 4 → 5 boli zasadne a teraz budu v kazdej verzii menit funkcnost? radost, pomaly z toho zacina byt kocurkovo a to uz doteraz stalo za prdlajs. Nebodaj chcu zendaci znechutit phpcko?
#9 ehmo nový
nepripomina ti to windows? zeby v tom mali pani z ms prsty? :)
#10 Pavel nový
#7 David Grudl: z vlaku, jaksi v patečním 100 minutovém zpoždění, pak ještě výměna lokomotivy (ne za vodku). Tak nějak se lidi dají do řeči… :) a zjisti zajímavé věci…
#11 Ondra nový
Mně PHP5.2 nepomuze!! A kdy vyjde PHP6?
#12 paranoiq nový
late static building není chyba – vývojáři jej prohlásili za vlastnost (třikrát hurá :[ ). ‚skutečnou‘ chybou je třeba nemožnost statickéno volání __call(), což je v buglistu již dva roky a vývojáři to neřeší.
#13 error414 http://www.error414.com nový
A je vubec nejake reseni tohoto problemu? Kdyz na nas uz i vyvojari jazyka dlabou?
#14 llook http://llook.wz.cz/weblog/ nový
#5 Pavel: O čem by psali. Podívej se na vyvojar.cz, o čem bloggeři fungující technologie píší.
#9 ehmo: Většina Windows API je bezva, trochu to ale připomíná některé části, třeba Direct3D, tam ty přechody mezi verzema bývali hustý…
#12 paranoiq: To víš, jsou všichni strašně vytížení a nikdo nemá čas to označit za vlastnost.
#15 Martin nový
Vývojáře PHP začínám čím dál tím víc považovat za bandu prasat, která z prasení udělala cíl a neschopnost povýšila na výhodu.
Možná se nakazili od většiny uživatelů tohoto jazyka, nevím. Ale celé PHP se řítí do pekla.
Myslím že pomalu nastává čas tento vlak smrti opustit.
#16 Tomáš Hubálek http://blog.hubalek.net nový
Podle mě je jediný důvod proč PHP neignorovat jeho podpora hostingovými firmami. Implementace tohoto jazyk je vysloveně špatná a podpora vývojářů stejně tak.
Už by se měl konečně ustanovit nový „standard“, co má slušný webhosting splňovat, protože investovat do aplikace napsané v PHP jsou vyhozené peníze!!!
#17 noname http://kapler.cz nový
promiňte, opravte ignoranta (mě) – jaké je licence php? jestli je to closed-source – byl by takový problém udělat plně kompatibilní open-source engine, který by byl plně kompatibilní s pětkou i čtyřkou?
#18 ivan_d nový
Tak si taky přisadím. Používal jsem knihovnu nusoap (nepovažuji ji za úžasnou, ale fungovala), po přechodu na php5 nastal problém – redefinice třídy soapclient. Inu přejmenovat a jde se dál. Pro práci s časem jsem si vytvořil třídu DateTime. A nyní (jak jsem se dočetl) budu muset opět přejemenovávat. První myšlenková obhajoba php – to mi mohli udělat i v javě, či pythonu byla hned vyvrácena: nemohli. I na tom je vidět, že php nemá žádný rozumný domyšlený koncept. Přitom i třeba python začínal jako nástroj pro jednoduche několikařádkové skripty.
Bohužel, jakmile byl jednou na začátku projektu zvolen špatný jazyk, už se ho člověk nezbaví.
#19 Vasek nový
#16 Tomáš Hubálek: Az bude libovolny jiny jazyk pouzitelny ve sdilenem webhostingovem prostredi jako PHP, neni problem ho nasadit. U PHPcka staci nastavit open_basedir, safe_mode + par drobnosti a uzivatel se nedostane ven ze sveho domovskeho adresare (pokud teda neni php deravy jak reseto :)).
Druha vec je ta, ze proste po „alternativnich“ resenich neni poptavka. Troufnu si rict, ze (z linux zakazniku) 95% chce PHP+MySQL, 4% PHP+PgSQL a zbytek jine programovaci jazyky+Firebird/SQLite. A nic na tom nezmeni narky advanced programatoru, kteri (pravem) nadavaji, ze php je bastl. S tim taky souhlasim, ale co se da delat…
#20 Majkls nový
Já se zastanu programátora v jazyce C.
A co se problémů s dalšími jazyky týče… Ono by se dalo ledacos, kdyby se chtělo. nebudu jmenovat konkrétní firmy, které na hostingu další jazyky mají. Je to jen otázka poptávky a nabídky. Zrovna nedávno po mě chtěl někdo pythona v cgi… no a má ho! :).
#21 Radek Cervinka nový
Sem tam čtu tady nářky nad problemy s PHP (naposledy s optimalizaci PHP) a je mi Vás fakt lito.
Programoval jsem v nem chvilku (jeden z projektu je zde http://coins.azz.cz/) a po letech v objektovem prostedi s duslednou typovou kontrolou (Delphi, C#) jsem si rval vlasy.
PHP je hrozny bastl.
Nastesti ted muzu programovat pro web (jinak programuji gui app) v ASP.NET a opet mam vlasy na hlave (kdo nezkusil, neuveri).
PHP bych nikdy nepouzil na nic vetsiho nez tak 200 radku.
Mimochodem vrele doporucuji IronPython (implementace Python pod .NET)
http://blogs.msdn.com/…asp-net.aspx
Jinak treba forpsi nabizi hosting s ASP.NET za stejnou cenu jako s PHP
#22 pkm nový
PHP to už není jazyk, to je bastl pro amatéry. Nechápu schopné vývojáře, co v tom dělaji. Jediné co chápu je to, že je dostupný na free hostincích. Ochutnejte Ruby a na už budete chtít šáhnout jen dvoumetrovým klackem.
#23 Whitek http://javabench.com nový
Otazka do plena: co se tedy vyplati ucit (kdyz je PHP takovy „bastl“)? Melo by to byt pokud mozno jednoduche a efektivni pro praci ; )
Vyplati se ten Python? Ruby?
#24 Valis nový
Ty Spajky,
a proč namísto IronPythonu nedáš šanci přímo Pythonu?
A jak se jinak máš šéfe? Prgáš weby?
#25 Michal nový
#22 pkm: No jasně, že váháš…
Projeď si tutorial Djanga je to fakt jednoduché.
Pokud bych to měl shrnout a zjednodušit, tak:
Hotovo. Možná to zní příliš složitě, ale zkus se začíst do toho tutorialu.
Jediný problém který by tě od Djanga mohl odradit je hosting. Jak už se tu několikrát zmiňovalo, není to ještě tak obvyklé a budeš se muset poohlédnout po firmě, která ti ho bude schopná nainstalovat.
#26 Lukoko nový
Čas přejít na Python
#27 David Grudl http://davidgrudl.com nový
#10 Pavel: ať už říkal cokoliv, tak to jsou jen smyšlené pomluvy
#17 noname: je to open source pod svobodnou licencí
#20 Majkls: že PHP původně nebyl objektově orientovaný jazyk není argument. To totiž nebyla ani řada dalších populárních jazyků. Pokud se však jednou k objektové orientaci rozhodli, tak podle toho mám očekávání a jazyk kritizuji.
Problém vidím v tom, že naprogramovat interpreter a navrhnout jazyk jsou dvě naprosto odlišné disciplíny. V případě PHP se obojího zhostují titéž lidé a na výsledku je to znát. Bohužel.
Věřím, že jde o špičkové kódéry, ale jakmile začnou kecat do návrhu jazyka, táhnou jej ke dnu. Neobjektovou část jazyka PHP považuji za výborné dílo. Naopak objektová sféra je z 90 % pofiderní. A chyby plodí další chyby.
#21 Radek Cervinka: články o optimalizaci rozhodně nebyly nářky!
#25 Michal: to už ale srovnáváš jazyk a framework…
#28 Michal nový
#27 David Grudl: Aha, no jo… :)
Tak jinak – Python je hezky jazyk a Django pekny framework napsany v Pythonu…
#29 Jakub Hegenbart nový
#3 Michal: Nějak nerozumím tomu, co na RoR je „prošpikované JavaScriptem“ – nikdo ho nikoho nenutí používat a generovat v RoR „plain 'ole HTML“ je trivialita. A jinak, jak v Pythonu, tak i v Ruby (a vlastně i v Perlu) si člověk může vybrat ze spousty pomůcek na tvorbu webu a určitě se najde něco, co mu sedne.
#30 Radek Cervinka nový
#24 Valis: Zdar Valis, protože mám rád určitý komfort a navíc .NET je fakt velmi dobrá platforma. Jinak weby moc nedělám, spíše jako doplněk IS. Ty mince jsou taková nezisková srdeční záležitost
Nechci být za nějakého zaslepence, ale dokud jsem nezkusil ASP.NET tak jsem si říkal jak je PHP cool pro web.
Dám příklad: potřebujete odeslat formulář. Takže na formulář dáte tlačítko, poklepete na něj a IDE vám vygeneruje kostru obsluhy (jako v Delphi a dalších RAD).
Napíšete obsluhu a chcete to odladit. Tak tam date breakpoint a po stisknutí tlačítka v browseru se vám to zastaví v debuggeru.
Nehledě na to že spousta chyb se odchytí už při překladu (kompilovaný a navíc strikně typový jazyk) – na rozdíl od PHP.
Navíc si můžete vybrat jazyk v kterém chcete programovat (C#, VB, IronPython, ObjectPascal …).
#31 Majkls nový
#27 David Grudl: chápu tvé rozhořčení nad nesplněnými touhami. Byl jsem pesimistou nad OOP v PHP od doby, kdy mi kamarád řekl, že tam něco nefunguje, jak by mělo. když se jednou něco neudělá pořádně, obvykle se problém vleče. PHP je toho dobrým příkladem. Co se C# týče. Slyšel jsem hoodně zajímavých názorů o tomto jazyku. Například jeden programátor nadával, jakej to je bastl. Co se typovosti týče. Nevidím v tom příliš velkou výhodu. Vstupy se musí ošetřit u obojího. Jak u typového, tak u netypového jazyka.
#30 Radek Cervinka:
…poklepete na něj a IDE vám vygeneruje kostru obsluhy (jako v Delphi a dalších RAD)…
Mno ale ASP.NET je horší v tom, že za sebou tahá hromadu bordelu a tak například obyčejný kalendář vyžaduje DOM Javascript. Ale myslím, že o tom už tu DGX jednou mluvil. Samozdřejmě pokud to uživatelům neavadí a nevypínaj si JS, je to fajn. Měl jsem nainstalený mono. Zajímavá platforma. Ale příde mi skoro jedno, jestli napíšu celý formulářový tlačítko, nebo jestli mi ho vygeneruje funkce, když tam stejně musím napsat styl, name, value, id… Takže je lepší si stejně napsat vlastní funkci. Míň balastu. Ušetřená práce +- žádná. Generátory kódu jsou fajn. Určitě ušetří spustu času. Ale takový generátor se dá sesmolit i pro PHP, Ruby, Python, Perl… a nepotřebuju k tomu .NET. Takže to je otázkou IDE.
Například Na pythonu se mi líbí volání funkcí. napíšu si jména funkcí. a pak je volám přímo parametrem v url. to je celkem fajn, ne? Neříkám, že to nejde udělat jinde. Určitě by to nebyl problém.
#32 Michal nový
#29 Jakub Hegenbart: Když se dnes člověk rozhodne psát nějaký web projekt, určitě po chvilce Googlení najde nějaký ten framework, nebo minimálně návod, jak ho zrealizovat v jazyce, který mu je blízký.
Dělám 3 roky v PHP. Jsem si naprosto jistý tím, že pokud člověk není prase, tak s PHPkem (ale vlastně s jakýmkoliv jiným jazykem) může dělat divy. Nicméně kdysi jsem ochutnal Python a strašně se mi zalíbil. Začal jsem ho používat na systémové věci a začal koketovat s myšlenkou využít jej i pro weby.
Narazil jsem na Zope/Plone. Vypadalo to slibně, ale po čase jsem pochopil, že ochočit tuhle bestii nebude jen tak. Věnoval jsem mu nemálo času, ale pořád jsem nebyl schopen dělat věci podle sebe. Neustále jsem se musel podřizovat hotovým řešením.
Pak přišla frustrace, a další hledání. Narazil jsem na ROR, ale nechtělo se mi učit další jazyk. Navíc jsem přesvědčen, že efektivita práce v Ruby a v Pythonu bude podobná.
No a pak jsem objevil Django, a byl jsem v sedmém nebi. Je to opravdu pěkný framework, a konečně mám pocit, že se v tom dá i programovat (naražím na Zope/Plone).
To tvrzení, že „…ROR je prošpikovaný Javaskriptem…“ jsem nabyl v minulosti po prolézání zahraničních webům, které byly napsány v ROR. Většina z nich byla silně „AJAXová“, samý efekt, samé dynamické změny v HTML (prostě Web 2.0 hype). V mailing listu Djanga se často řeší, jak je na tom právě s podporou AJAXu, a jako příklad je obvykle zmiňován ROR (který je v tomto ohledu údajně dál).
Takže tak… :)
#33 Bach nový
Proč musím v PHP pristupovat k atributům a metodám přes šipku i uvnitr třídy?
#34 Radek Cervinka nový
#31 Majkls: :), vetsina komponent je psana tak ze v pripade kdy je dostupny javascript tak se pouzije, kdyz neni tak se automaticky provede volani pres server.
Typicky: validace vstupnich polozek formulare
(dostupny JS? ano – provede se validace na klientu, neni? neva – provede se validace pres server)
A ty pro to nemusis ani hnout prstem, mas pro to jeden kod (no kod – nastavis jednu vlastnost na komponente)
Ad ten kalendar: Nelibi se ti? Pouzijes jiny.
Ale hlavne jsou to kompilovane jazyky, takze vetsina veci je odchycena uz pri prekladu. Takze usetrim tak +60% casu ladeni a navic mam urcitou jistotu. To se ale blbe vysvetluje programatorum v PHP, kteri pouzivaji jednu a tu samou promennou jednou jako string a o kousek dale jako cislo.
… Například Na pythonu se mi líbí volání funkcí. napíšu si jména funkcí. a pak je volám přímo parametrem v url. to je celkem fajn, ne? …
neni to ale trochu nebezpecne?
#35 finc nový
Nevím, proč tady všichni nadávají tolik na PHPko a pak v něm více jak polovina programuje. Tvrdit, že .NET je lepší, je jako se hádat, zda Linux nebo Windows. Obojí má svá specifika a člověk by sám měl přejít na to, co je mu bližší.
v PHP programuji vetší intranetovy web. projekt, který jsem postavil na PHP5. Pravdou je, že mě štve dost věcí, ale i přesto si myslím, že PHP je použitelný jazyk i ve větších projektech a hlavně je použitelný i jako OOP jazyk, i když s určitými omezeními. Co by se podle mě mělo změnit:
Myslím, že by pak konečně mohli vznikat zajímavé frameworky, které by se postupně standardizovali.
#36 Majkls nový
#34 Radek Cervinka: neni to ale trochu nebezpecne?
… od čeho máme protected a private v OOP, že :))…
Ale hlavne jsou to kompilovane jazyky, takze vetsina veci je odchycena uz pri prekladu
ale těch 40% bezpečnostních děr se při překladu neodchytí. Apropo řekl bych, že to není 60%, ale méně. Teda pokud někdo takhle prasí kód :)). Nicméně semikompilované jazyky určitě nejsou špatné. Jinak používat proměnnou jako string i jako číslo, to je benefit netypových jazyků. Proč se starat o konverzi, když mi ji jazyk udělá sám. A s bezpečností se neohánějte. Ona v těch typovejch není rozhodně lepší než v netypovejch. To je jen iluze. Pravda pro kontrolu čísel musím u netypového PHP přetypovat proměnnou. Někde jsem o tom četl skvělý článek.
Ad ten kalendar: Nelibi se ti? Pouzijes jiny.
No vidiš, to už si zrovna můžu napsat vlastní. Asi stejný jako s názvy měsíců v locale. Prostě nemaj října, tak musim mít vlastní pole, kde bude října. Prostě univerzální != všeřešící. Některý věci jsou tak obecný, že se vyplatí si napsat vlastní specializovanou. Ale je fakt, že jelikož asp.net má všechno tohle integrovaný v sobě tak to je daleko rychlejší a efektivnější, než to mít hozený kdesi vedle byť ve formě frameworku.
#37 Martin Snížek http://www.snizekweb.cz nový
No vidíš Davide, a ty ses se mnou hádal
http://www.snizekweb.cz/…/php-k-cemu/
#38 In-počasí http://www.in-pocasi.eu nový
Povedený článek
#39 zirafka http://zirafka.cz nový
#38 In-počasí: Přeji příjemné a ničím nerušené spamování komentářů /-:
#40 David Grudl http://davidgrudl.com nový
#39 zirafka: to je za dnešní den jediná pochvala, to nemůžu smazat
#41 In-počasí nový
Tady nešlo o spam, stejně je tady nastaveno rel=„nofolow“
#42 zirafka http://zirafka.cz nový
#40 David Grudl: ale tenhle smazat muzes. Tam Te nechvali (-;
#41 In-počasí:. Tady nešlo o spam, stejně je tady nastaveno rel=„nofolow“
Ale to sis vsiml, az jsi to poslal, ne?!
#43 pawel nový
O Django jsem slysel, rad se na nej podivam. Jinak jsem se zacal zabyvat RoR a musim rict, ze neni prospikovane javascriptem. Jedna se o formu view – klasicke rhtml nemusi obsahovat zadny javascript. Javascript to obsahuje, pokud se dela nejaka Ajaxova frajerinka, a to pak je view rjs soubor.
#44 attila szabó http://w3net.eu/ nový
`
class CollectionBase implements IteratorAggregate, Countable {
public function addItem($newItem, $key = null) {
}
}
class SurveyCollection extends CollectionBase {
public function addItem(Survey $newItem, $key = null){
parent::addItem($newItem, $key);
}
}
`
Strict Standards: Declaration of SurveyCollection::addItem() should be compatible with that of CollectionBase::addItem() in …
WTF?
Tak toto ma znechutilo. Takto sa neda programovat v OOP. To je o nicom. Preco nemozem pouzit „type hint“ v child class? Ved je to uplne logicke, no nie?
#45 Marty http://martinvseticka.eu nový
Možná by pomohlo napsat phpt test: http://qa.php.net/write-test.php, čož by mělo zaručit, že tenhle problém znovu nenastane.