Přejít k navigační liště

Zdroják » Zprávičky » PHP mění oddělovač jmenných prostorů na zpětné lomítko

PHP mění oddělovač jmenných prostorů na zpětné lomítko

Zprávičky PHP, Různé

Doslova za minutu dvanáct se vývojáři PHP rozhodli změnit oddělovač jmenných prostorů. Podpora jmenných prostorů patří mezi nejzásadnější novinky dlouho očekávané verze PHP 5.3. Do vývojové verze byly začleněny asi před rokem, jejich dokumentace je součástí manuálu PHP a řada vývojářů už začala připravovat svůj kód na jejich adaptaci. Nyní, kdy se netrpělivě očekává vydání ostré verze, došlo k zásadní změně syntaxe. Oddělovač jmenných prostorů „čtyřtečka“ :: bude nahrazen zpětným lomítkem. Název třídy např. Framework::Web::Http­Request se tak změní na FrameworkWebHttpRe­quest.

Důvodem změny je nejednoznačnost zápisu foo::bar(), kdy není zřejmé, zda jde o volání funkce bar() v prostoru foo nebo o volání statické metody bar() třídy  foo.

Komentáře

Subscribe
Upozornit na
guest
58 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Anonymní

se jmena trid v PHP psala s velkym pismenem, tak by to problem nebyl, ne? Tedy az na poruseni zpetne kompatibility s PHP4?

Napriklad v Ruby to tak je, ze jmena trid jsou konstanty a jako takove tedy museji zacinat velkym pismenem

Proc vlastne PHP umoznuje psat jmena trid malym pismenem? Neni to bordel?

dayvee

ne, neni to bordel. k tomu kdyby jmena trid byly konstanty, nesly by provadet kousky jako:
$a = new $b();
kde $b je jmeno tridy. velice sikovna vec :)

Anonymní

mysleno, ze je mozna skoda, ze PHP neni case-sensitive

kdyby PHP bylo case-sensitive a tridy se psaly 'capitalized', zatimco namespaces 'lowercase', tak by bylo po problemu. Nebo alespon tuto konvenci dodrzovat. PHP vyvojari ale s oblibou pisou jmena trid malym (viz dokumentace k namespaces)

wdolek

vyhoda? :D tak s tim tedy nesouhlasim. tato vyhoda mozna usnadnuje programove volat tu, nebo onu tridu, ale tento zpusob mi pride naprosto nestastny. proc neni nejaka knihovna v SPL, ktera by udelala to same, ale mene "prasacky"? (jako v Jave nebo .NET ?)

Martin Povolny

ale sly

retez = Kernel.const_get('String').new

ono je mozne delat veci ciste a soucasne flexibilne

bohuzel pro PHP uz je pozde, z te tuny exkrementu uz to nikdo nevyhrabe :-(

Jan Molič

V Ruby jména tříd konstanty jsou. To, co píšete, provést lze i v Ruby – například pomocí eval().

Přesto nepokládám tyto konstrukce za přínosné; sice s nimi lze dělat všemožná "magie", ale v praxi jsou pak programy mnohem hůř čitelné, zejména pro někoho, kdo kód nepsal.

alancox

V PHP je také eval, a lze to provést také. Kromě toho je v PHP i reflexe, lze to provést i přes ní. A pak jde také založit instanci přes její název v proměnné.

Jinak eval je vždy až ta nejhorší možnost, cokoli jiného je skoro vždy lepší.

alancox

Právě násilné vnucování konvencí názvů všeho v Ruby je jedna z věcí (z mnoha dalších), proč jsem se Ruby vyhnul.

A jsem velmi rád, že žádný jiný jazyk, se kterým jsem se setkal žádné násilné konvence ohledně velikosti písmen v identifikátorech nepředepisuje.

Anonymní

vy pisete konstanty malym?

alancox

Vám to nějaký jazyk vnucuje? Kromě Ruby existuje jazyk, který Vám na úrovni syntaxe vnucuje nějaká pravidla pro tvorbu identifikátorů konstant?

Anonymní

ano, treba Erlang :) A vlastne kazdy jazyk si vynucuje pravidla pro pojmenovavani vsech identifikatoru, nejenom konstant

a co je na tom vlastne spatneho? Vzdyt prece vsichni konstanty pisou velkymi pismeny (vcetne Vas), je to dobra konvence, ne?

nemel byste takto na Ruby dstit siru, nezaslouzi si to!

alancox

Erlang je silně velmi rozšířený a používaný mainstreamový jazyk. :-)

Každý jazyk si vynucuje nějaká pravidla pojmenování identifikátorů – nicméně pro všechny identifikátory v modulu/programu jsou obvykle pravidla stejná bez ohledu na to, zda jsou to konstanty, proměnné, třídy, funkce, atd.. A tak to má být. Jen mizivé procento jazyků nemá takto konzistentní řešení.

U konstant je rozdíl mezi "lidským pojetím konstanty" a "počítačovým pojetím konstanty". A mohou se lišit pravdila pro psaní i mezi těmito dvěma pojetími. Programovací jazyk Vám vždy vnutí jen to počítačové pojetí. Ale programátoři (dobří) píšou zdroják pro člověka – a počítačová konstanta může být navenek prezentována třeba jako proměnná (pokud jí třeba v další verzi jako proměnnou hodláte udělat). A nebo tisíc jiných možností.

Ohledně Ruby – nemám nic proti němu, ale rozhodně to není jazyk, který by měl být vzorem. Mnoho věcí vyřešil dle mého soudu nepříliš ideálně. A zvláště pokud znáte vzor Ruby, Smalltalk – kdysi hodně populární a velmi čistý jazyk, pak pochopíte dvojnásob. Jestli bych něco nerad, tak to aby se Rubym inspirovali jiné jazyky, a už vůbec ne v oblastech jako je nesmyslné vnucování velikosti písmen v identifikátorech přímo na úrovni syntaxe.

Anonymní

A práve kôli takýmto sviňárňam som definitívne zanevrel na PHP a prešiel na javu. Keď Rasmus Lesdorf vyvinul prvotný jazyk na spracovávanie skriptov dal mu názov PHP. Bola to skratka od Personal Home Pages. A presne tam by malo PHP ostať.

Podhy

oni by hlavně přitom měli trochu přemejšlet a podívat se jak to dělají ostatní jazyky a nevymejšlet naprostý "blbosti"

podle mě by nejlepší byla tečka ale ta asi z důvodu že někdo nazačátku něco blbě navrhnul nejde použít a nebo čtyřtečka

peca

Tečka se používá na spojování řetězců.
To by se muselo celý php přepracovat, takhle to je relativně rozumný, odstraní se nejednoznačnost.

wdolek

proti kompletnimu prepracovani PHP bych ja osobne nic nemel :D protoze dnesni situace neni nikterak ruzova!

alancox

Ale myslím, že milióny programátorů, co v tom už napsali značné množství kódu by Vás v pohodě přehlasovalo. A je to tak IMHO správné.

wdolek

"programator" – takovy by proti nehlasoval. mozna tak nezkuseny koder, ktery je nadsen ze vsech tech PHP perverzit. clovek, ktery tvori nejakym systemem a nepouziva veskere ty zbesilosti, by ocesani o blbosti jedine ocenil. vidim to dnes a denne.

alancox

Tak zkušený programátor by nikdy nehlasoval pro zrušení zpětné kompatibility. Po 20 letech programátorské praxe mám dosti kolegů, a mohu říct, že žádný z nich by nebyl v nejmenším nadšen, kdyby třeba musel sto tisíc řádek v určitém jazyce přepsat kvůli zrušení zpětné kompatibility jazyka.

Ale holt někdo dělá, a někdo kecá, že pane Zdeňku.

wdolek

jenze zde je rec o PHPcku, jestli se nepletu. PHPcko tu neni 20 let, vetsi aplikace se vetsinou pisi v necem robustnejsim (Java, .NET) nez v PHPcku – i kdyz facebook nebo wiki jsou prikladem, ze to nejak napsat jde.
jaktoze ale treba v Jave jsou deprecated veci (nebo obsolete ?), ktere se casem skutecne z javy vytraci a funguje to?
a popravde, kdyz sem prevadel "stredni" aplikaci z PHP4 do PHP5, take sem musel "par" radku predelat ;), takze to s tou zpetnou kompatibilitou nebude tak zhave, ze? – nikdy se ji programator uplne nevyhne. a za cenu toho, ze z PHPcka vymizi nekonzistentni chovani (neco vraci ERROR, neco Exception a neco jen WARN… nektere stringove funkce maji parametry tak a jine onak – clovek aby porad koukal do dokumentace; nektere figle, ktere se daji delat jsou skutecne nevidane! …) by to docela i stalo.

alancox

Prosím Vás, co se z Javy deprecated kdy vytratilo? Kokrétní příklad prosím. Ne nekonkrétní kydy, které nejsou pravda.

Přechod z PHP4 na PHP5 byl velmi jednoduchý, u mých zdrojáků konkrétně jsem nemusel změnit ani čárku, a mám jich slušný balík. V zásadě seznam změn byl přesně popsán, a byly to drobnosti.

Jinak větší aplikace se píší v něčem robustnějším, ten .NET si z toho škrtněte, MS nikdy neudržel věci beze změn déle, než pár roků (a to už se to oslavovalo), takže ani .NET bude spíše záležitost MS fandů (mluvíme o důležitých projektech, kde na něčem záleží), jak už dnes je.

Já jsem nikde nepsal, že PHP zcela zachovává zpětnou kompatibilitu, ale váží si jí přeci jenom asi tak 1000x víc, než Python a Ruby – největší zvěrstva, které dávají druhým na vědomí, že překopávat syntaxi po mnoha letech je správné. Ale dočkejte času, až uvidíte, jak příšerně časem Python a Ruby dopadne až se o něm bude mluvit jako o historii, poučíte se.

Žádný jazyk není dokonalý a v každém jsou věci, které vám dokáží pít nervy – vezměte libovolný namátkou – C, C++, Python, Ruby, Java, C#, cokoli – neexistuje dokonalý jazyk, kde by nebylo lépe něco udělat jinak. Nikdy nebude existovat žádný dokonalý jazyk, a i kdyby, stále bude plno subjektivních věcí, které se někomu budou líbit a někomu ne.

A zpětná kompatibilita a praktičnost jazyka je cennější, než nějaké zoufalé překopání, které stejně ničemu moc nepomůže (však se za čas poučíme ze špatných konců zejména Pythonu – je tu už cca 17 let, Ruby asi dopadne lépe, protože přeci jenom tu není tak dlouho a tak se to dá trochu lépe zkousnout).

wdolek

php4 -> php5… no, neni to tedy primo veci "jazyka php" jako spise knihoven pro praci s xml. to je konkretni vec, kterou si po roce a pul pamatuji. pak tam byla zmena prace se sockety a "objekty" z php4 se mi v php5 obcas chovaly nevyzpitatelne – cili sem je stejne prepsal do "php5" a nenechaval je ve stare, byt kompatibilni podobe.

kdyz se navic podivate na to, co bude pravdepodobne zruseno v php6, tak bych rekl, ze tak 80% webu skonci – kolik lidi rado pouziva magic_quotes a register_globals, odstraneni { } pro vstup do stringu (zde vubec nevadi pouziti symbolu pro blok, ze?) nebo break $n? myslim, ze vetsina tech skvelych PHP webu na toto doplati, takze jakapak zpetna kompatibilita?

a ze neexistuje dokonaly, casem provereny jazyk? co smalltalk? :) … a nejsem zastancem nejakych radikalnich zmen, ale podivejme na ten python. ano, ma nejake zmeny, a asi mely nejaky duvod. autori php se ale nepoucili z chyb ostatnich.
ostatne – kdyz sem videl prvne C#.NET, mel sem pocit, ze jsem v Jave s nekolika jinejma prikazama. pak sem se do toho zakoukal – java osekana o slozite a komplikovane konstrukce – jako by se microsoft podival jinam – podival se, jak se nekde neco resi "slozite" a vyresil stejny problem mnohem pohodlneji (nechci se tu ale zastavat M$).

u PHP nabyvam dojem, ze se nikdo nicim nepoucil, ze se tu a tam vezme nejaka featura z nejakeho jazyka a vznikne tak celkove jakasi nekonzistentni smeska bez jakehokoliv radu…

alancox

Ohledně php5 a zpětné kompatibility – ano, nebyla zajištěna, tím se netajím. Řada knihoven pro práci s XML mimochodem byla označena jako experimentální, a tak změny v nich moc nehodnotím.

Jinak ohledně magic_quotes a register globals se jistě dotkne řady lidí, ale ono tyhle věci jdou zajistit i bez změny zdrojáků. PHP na to prostředky má.

Ale znovu – nikde jsem netvrdil, že php striktně zachovává zpětnou kompatibilitu. Nicméně v uvažování vývojářů určitá brzda proti rozorávání kompatibility je – a je to dosti znát. Na rozdíl od Pythonu a Ruby, kde jsou autoři již dlouho asi pod vlivem lysohlávek, a kompatibilita se bere jen jako nemoderní přežitek. Jinak php6 tu stále ještě není a tím pádem jakékoli konečné soudy o tom co bude v php6 jsou značně předčasné. Například tu stále ještě nemáme ani tu PHP 5.3 s těmi namespacy, ta stále není v produkční verzi a PHP 6 je velmi velmi daleko. Do té doby se toho ještě tolik změní, že nemá smysl to teď hodnotit.

Dokonalý jazyk neexistuje, neexistoval a nikdy existoval nebude. Python nemá důvod k žádným radikálním změnám, tedy kromě toho, že pan Rossum, autor, se nudí, přeskočilo mu, a začal nenávidět Céčko a LISP a vše, co se mu zdálo, že v Pythonu tyto jazyky připomíná, začal tvrdě a bez důvodu vyhazovat z Pythonu. Naopak správná je cesta like Perl, koneckonců se autor Pythonu a autor Perlu sčuchli dostatečně. To co tu píšu není ironie, toto je jen naostro řečeno to, co pan Rossum, autor Pythonu, zcela veřejně říká a netají se s tím. Také tvrdí, že jazyk Python by se měl co nejvíce přiblížit lidskému jazyku (v zásadě trochu kopíruje Cobol, je vidět, že tento pokus nezažil) a výsledkem je třeba mimo jiné naprosto nejdebilnější syntaxe ternárního operátoru v Pythonu ze všech jazyků, se kterými jsem měl tu čest se setkat.

V komunitě Pythonu jsem byl velmi aktivní, a skončil jsem s Pythonem zhruba před měsícem – to když jsem odřezal poslední drápky spojující mě s Pythonem. Důvodem opuštění Pythonu je totální kašlání na investice vložené do vytvořených zdrojových kódů Pythonu – Python nectí ani zpětnou kompatibilitu, ani nevytvořil nástroj, který spolehlivě převede zdrojové kódy ze staré verze Pythonu do nové.

Já když prvně viděl C#, byl jsem nadšený. To nadšení ale rychle opadlo s dalšími verzemi .NETu. Původní jednoduchost a celkem domyšlenost rychle vzala za své a dnes je z toho takové jiné PHP (abych se vyjádřil Vašimi obraty) – jako když pejsek s kočičkou vařili dort a ze všeho dobrého tam dali kousek. Je to dnes už značně přeplácané, a je vidět, že MS tam lepil tu nesourodé to, tu nesourodé ono.

PHP podle mého je plus mínus v konečné verzi – ještě se dočkáme namespace, unicode, a pak už to bude věcí spíše knihoven. V PHP laškuji od verze 3 a zatím mi přišly změny víceméně k lepšími. Jenom se neměl inspirovat Javou v OOP a šlo by to.

Anonymní

Hlavne ze tu mame brouka Pytlika a rozumbradu jmenen Ponkrac. Vsechno vi, vsechno zna, hlavne ze jsou vyvojari Pythonu, Ruby a spousty jinych jazyku naprosti tupci, jen on je nejchytrejsi. Co se mu nehodi, tak na to prska sve jedove sliny.

alancox

Jasan, pane anonyme, teď jste to trefil! Já pana Ponkráce znám, dejte si na něho pozor! A navíc je tak oprsklý, pane anonyme, že se dokonce ani neskrývá a vystupuje pod svým pravým jménem! Pěkný ptáček! Opravdu na něho bacha!

Marek

I vy jeden srandisto :-).

„Jinak větší aplikace se píší v něčem robustnějším, ten .NET si z toho škrtněte, MS nikdy neudržel věci beze změn déle, než pár roků (a to už se to oslavovalo), takže ani .NET bude spíše záležitost MS fandů (mluvíme o důležitých projektech, kde na něčem záleží), jak už dnes je.“

Totální neznalost .NETu z toho příspěvku přímo čiší, ale což i tací lidé bez znalostí občas kříčí do světa. Snad časem i Vy zjistíte, že ne vše od MS je zlo a špatné. Ale to je tradiční házení hrachu na zeď. Někteří lidé jsou prostě předem zaujatí… Nezbývá než Vám opravdu popřát brzké procitnutí.

sdfasdfasdfas

No by ses divil, zrovna delame na velkem projektu, kdy se integruje .NET se SAP app. serverem (abapovym, SAP javu pomalinku opousti). No a SAP, to jsou hoooodne velke projekty ;-)

alancox

"A práve kôli takýmto sviňárňam som definitívne zanevrel na PHP"

Kvůli jakým sviňárnám? PHP udělá úpravy v developer větvi, namespace nikdy v PHP nebyly dány do produkčních verzí, a vyskytovaly se pouze v unstable verzích PHP určených pro vývoj. Jakékoli změny v syntaxi namespace jsou tedy zcela v pořádku. Žádný produkční kód pro PHP, žádná stabilní verze PHP nikdy namespace neměla, a toto bude novinka, o které se prostě vedou diskuse, jak bude vypadat konečná situace v syntaxi namespace bez jakékoli změny pro stávající produkční verze.

Jinak Java také vznikla původně jako jazyk pro domácí spotřebiče a je to na ní dodnes dosti znát.

wdolek

jenze Java se narozdil od PHPcka vyviji… deprecated veci casem uplne vymizi. v PHPcku je porad vsecko a PHPcko bobtna a bobtna… a pak to dopadne tak, ze kvuli nejake zpetne kompatibilite zvoli jako oddelovac jmenych prostoru znak, ktery se vsude jinde pouziva pro escapovani!
nevidim duvod, proc neudelat PHP6… nebo 7? :) vyhazet z toho blbosti a udelat to poradne… dat pak cas lidem na to, aby si prepsali sve paskvily a… jelo by se dal. takhle to PHPcko skutecne nema moc budoucnost.

alancox

Ano, až na to, že zatím nic z Javy co bylo označené jako deprecated nezmizelo, aspoň pokud jsem to kdy potřeboval.

A je úplně buřtík, co se jinde používá pro escapování, protože každý jazyk má věci jinak a je to jeho věc.

Jinak Java bobtná a bobtná – srovnejte velikosti JRE jednotlivých verzí. A bobtná též nekompatibilně, není tam 100%ní zpětná kompatibilita.

Vy nevidíte důvod, proč vyházet "blbosti"? Já ano – a tou je zpětná kompatibilita a zachování obrovské sumy práce, kterou programátoři a vývojáři do svých kódů již vložili.

Jinak vsuvka: Každý, kdo hodlá radikálně měnit syntaxi mnoho let existující jazyka a "udělat ho pořádně" o sobě prozrazuje, že nikdy nenapsal, nebo neudržoval větší dílo po delší čas, nejlépe s neustálými opravami a úpravami. Ten by totiž pochopil, proč všechny seriózní jazyky, na kterých jedou kritické věci tohoto světa, zachovávavají velmi přísně zpětnou kompatiblitu – bohužel jsou to C++, C, Cobol, Java, Ada – protože tyto dovolují běh i velmi starých, a tím i velmi dobře časem i praxí odladěných programů. Ostatní jazyky se jenom kasají, ale nic kritického na nich neběží, protože každý programovací jazyk, který se neustále překopává od základu není seriózní jazyk, ale hračka na hraní, možná na krátkodobé malé programy, či skripty.

wdolek

ad Java: v jave sem par let nedelal, ale vim, ze jsem pri svych hratkach skutecne narazil na neco, co uz nebylo :P

… s kompatibilitou s vami souhlasim. ale C, C++, Cobol atd jsou od zacatku navrzene a vrhnute nejakym smerem. PHPcko mi pride jako smeska vseljakych pristupu, zrovna jak to bylo v dobe vzniku te ci one featury v mode. PHP mi pride (naprosto) nekonzistentni, coz se o Vami zminovanych jazycich rict neda.

alancox

ad Java: Já jsem na nic takového nenarazil, i když něco možná zmizelo. Nemám dokonalý přehled nad celou monstrózní knihovnou Javy, takže se nebudu hádat.

Hlavně C, C++, Cobol byly vržené směrem do enterprise praxe, kde naprosto nepřicházelo vůbec v úvahu, že by kdo kdy přišel s takovou ptákovinou, jak znekompatibilnit všechno, co bylo kdy v jazyce napsáno a měnit syntaxi jazyka v normovaném tvaru. Všimněte si, že C, C++, Cobol, Ada jsou jazyky, které vznikly a byly zaměřené na praxi. Python, Ruby vznikly jako hračky nějakého člověka, a evidentně autoři se snaží, aby moc prakticky použitelné pro větší a dražší projekty nebyly.

PHP nikdy nevnikl jako jazyk, to je jeho mínus. Vznikl jako sada pomocných skriptů v Perlu, a tudíž se nějaký promyšlený počáteční návrh nedá čekat. Ostatně moje odpozorovaná teorie: "Každý jazyk, který se inspiruje Perlem, nebo Javou skončí jako prasárna" platí u všeho. PHP je nekonzistentní, ale jinak velmi praktický jazyk – a proto se používá. A proto ho používám i já.

Existuje mnoho čistých jazyků, které bohužel jsou ale tak nepraktické, že v nich pokud možno se píše prakticky čím dál méně – LISP, Mercury, Haskell, Python, …

A pak jsou jazyky možná ne příliš čisté, ale prostě jsou praktické a pro praxi mnohem lepší, než ty čisté – C, C++, PHP, Java, …

No a co, že je PHP nekonzistentní. Prostě je už takové. Za to je pro web nesmírně praktické – je všudypřítomné, hostingy jsou levné, snadno rozchoditelné, a nakonec je to i jazyk orientovaný na web, což má také jisté výhody (i nevýhody samozřejmě).

Až najdete na tomhle světě (nejen v IT) něco dokonalého a stoprocentního, dejte mi vědět. Pak se můžeme bavit dál o dokonalém programovacím jazyce.

wdolek

ad Java: mm zjistuji, ze duvod proc sem nemohl nejake veci pouzit bylo spis ze nejake chytre IDE mi to jakozto deprecated vec nevnutilo, ale evidentne to stale soucasti javy je. omlouvam se za takove tvrzeni ;)

liborse

To, co tu píšete, je naprostá blbost. PHP nenahrazuje Javu a ani naopak.
Mohou se jen v některých místech využití krýt. Oba jazyky mají
v některých oblastech unikátní využití. Z toho logicky vyplývá, že
kvůli tomu, že se mi něco v PHP nelíbí, přejdu na Javu. Ano, někdy to
jde, ale v některých oblastech se nenahradí. Já PHP používám jako nutný
základ pro web aplikaci a javu tam, kde je třeba využít realtime přístupu
(tj. na webu prakticky nikde). PHP má obrovskou výhodu v tom, že na stránky
vytvořené v něm, se dostanete prakticky z jakéhokoliv prohlížeče.
Z javy ne. A ono dělat stránky v Javě je naprostá šílenost, tak možná
s pomocí javascriptu, ale tam je php mnohem lepší. Zase na druhou stranu si
neumím moc dobře představit aplikaci v php pro desktop. Dnes se ale rozdíly
stírají a asi bude možné všechno :-D. Já mám PHP rád právě kvůli těm
sviňárnám, co umožňuje. ;) A eval() se doporučuji zdaleka vyhnout. ;) Ale
možná tu jen plácám, tak mě berte s rezervou.

PS – ano, Javu i PHP znám „osobně“ :-D

liborse

Malá chybyčka se vloudila, správně je:

Z toho logicky vyplývá, že kvůli tomu, že se mi něco v PHP nelíbí,
automaticky nepřejdu na Javu. Java to prostě nemusí umět a naopak.

LaMMer

PHP má obrovskou výhodu v tom, že na stránky vytvořené v něm, se
dostanete prakticky z jakéhokoliv prohlížeče. Z javy ne.

Co to je nesmysl?

liborse

Definici pro nesmysl neznám, k tomu použijte třebas Otův slovník
naučný. Ale pokud se to týká mé věty, tak vysvětlení je zcela nasnadě.
Řekněte mi, jak v prohlížeči na třeba nějakém hloupém telefonu rozjedu
java aplikaci? Nanejvýše javascript a budete rád. Samozřejmě mám na mysli
plnohodnotnou javu a ne j2me, či náhražkami typu Opera Mini. ;) Jiná situace
by byla, pokud byste použil javu jako serverový jazyk, ale vy jste někde
takové využití viděl v praxi? Tak možná u Sunu :-D. Já zatím ne a
kdyby, nepřišlo by mi to 2× praktické. PHP je naopak perfektní věc, dává
mi široké možnosti a je prostě supr. Ne, nechci se tu s vámi přít. Java
je taky výborný jazyk, ale na web bych jí nedával, pokud nedělám aplikace
typu mapy atd. Pro mě je důležitá přístupnost odkudkoliv. ;)

Róbert Novotný

Z predpredreč­níkovho príspevku zrejme vypadlo „za“ (Co to je ZA nesmysl?).

Pan Šedivý, mám pocit, že máte trochu nepresné informácie o tom, ako je to s Javou.

Java ma dve použitia: na strane klienta v podobe appletov (dúfam, že už vymrú) a WebStart aplikácií. V týchto prípadoch sa u klienta predpokladá inštalácia JRE.

Keby ste vyvíjali GUI aplikácie v PHP, u klienta by ste tiež museli mať nainštalované PHP + knižnice nejakého widget toolkitu – čiže ste na tom rovnako ako v Jave.

Dominantné použitie Javy je v podobe riešení na serveri, kde existuje miliarda frameworkov a knižníc. Vývoj prebieha presne ako v prípade PHP, akurát používate iný jazyk. U klienta nie je potrebná žiadna Java, veď načo? Prehliadač dostáva predžuté HTML.

Aplikácie typu „mapy“ bežia na AJAXe, teda JavaScripte, ktorý beží v klientovom prehliadači a z hľadiska jazyka má s Javou spoločné asi toľko ako zem a zemiak, teda prefix v názve.

Java má problém v prístupnosti v tom zmysle, že kým PHP skripty nasadíte na ktorýkoľvek hosting (stačí totiž jeden Apache a jedna knižnica) pre Javu potrebujete softvér aplikačného serveru. V praktických podmienkach je takmer nemožné zabezpečiť zdieľanie aplikačného servera pre viacerých používateľov tak ako v PHP.

Ak sa však prekoná táto technologická bariéra (čo je zrejme možné len v prípade vlastného servera), vývoj a najmä možnosti v Jave sú nedozierne. Nie nadarmo si veľké firmy primárne vyberajú na veľké systémy Javu (alebo .NET).

Ladislav Thon

Jeden kamarád říká: inu, co čekat od programátorů v PHP?, a já jen stoicky doplňuji: inu, co čekat od programátorů PHP?

wdolek

doufam, ze za tento krok sklidi autori tohoto skvostu hodne kritiky a rozhodnou se pro puvodni reseni, nebo pro nejake z tech, ktere mi lezi v hlavicce…

varianta 1) zakazat definovani funkci ve jmennem prostoru. kdyz uz si hrajeme na objekty, tak znemoznit existenci funkce mimo tridu pri pouziti jmennych prostoru

varianta 2) (psal DG na svem foru) nejdrive zkusit volat funkci a az pote zkusit volat tridu. a nerekl bych, ze by takova magie delala PHPcku ostudu – to uz si udelalo ostudu jinejma vymyslama, tohle by bylo to nejmensi!

varianta 3) zrusit tecku pro spojovani retezcu (nahradit ji treba +… operator scitani mi prijde intuitivnejsi) a pouzit ji jako oddelovac jmenych prostoru. od verze 6 – aby meli koderi cas prizpusobit sve zdrojaky.

docela komicky na me pusobi log chatu mezi vyvojari – padnou argumenty, ze varianta se zpetnym lomitkem je malo citelna a dokonce prakticka zalezitost – ze ma obcas nekdo klavesnici, kde je lomitko uplne nekde v tahu, takze psani kodu se stava velkym utrpenim.

…takze misto reseni 1 nebo 2 se zavedl takovyhle slint :( – holt vymyslet slint je jednodussi nez to vyresit projednou a poradne. uz vidim, jak tahle featura bude za par mesicu deprecated :D

alancox

ad 1) hovadina, která zbytečně omezuje možnosti namespace – není proč to dělat

ad 2) hovadina, pak by náhodně definovaná funkce překryla třídu – a neexistoval by způsob jak zavolat třídu, když by existovala stejnojmenná funkce – tudíž varianta 2) je velmi hloupá, zanášela by spoustu náhodných chyb a ovlivňování svou prostorů identifikátorů – tříd a funkcí. Kterýkoli programátor by mohl zrušit třeba funkčnost libovolného frameworku, nebo knihovny, protože pouhou definicí funkcí by vyřadil, třeba nechtíc stovky jiných modulů. Velmi hloupé řešení je varianta 2).

ad 3) Tak to je asi největší krávovina. Rušit existující operátory v jazyce a dávat jim jiný význam.

P.S.: Docela jsem rád, že nemáte vliv na vývoj PHP (a pokud ano, budu se za PHP modlit). Sice PHP je poněkud nesourodá směs, ale osobně mi řešení, které developeři vymysleli ve všech aspektech přijde asi tak miliónkrát lepší, než cokoli jste navrhnul Vy.

wdolek

dobra, kdyz jsou to takove hovadiny, tak mam jeste jeden bod

4) vyhodit error pri shode jmen funkce a tridy. dnes take nemuzu nadefinovat dve funkce stejneho jmena, natoz dve tridy stejneho jmena… tak v cem je problem? kdyz bude programator dodrzovat zazite konvence – tridy velkym pismenem, funkce malym, tak ke kolizi nedojde. a nemusi to byt nijak vynucene. proste hodit error pri konfliktu, a at si to kazdej pise jak chce.

… ale predpokladam, ze i toto je milionkrat horsi, ze?

ostatne, ona je dnes jiz trida zakryta funkci

function foo() {
  echo 'foo 1';
}

class foo {
  function __construct() {
    echo 'foo 2';
  }
}

$a = new foo();

foo();

vypise pouze „foo 1“

alancox

ad 4) Bohužel PHP je dynamický jazyk, stejně jako třeba Python, nebo Ruby. To znamená, že čím méně možností kolizí uděláte, tím lépe, protože kolize se objevují postupně při natahování modulů.

Namespace není v podstatě nic jiného, než velmi silný antikolizní prostředek zabraňující kolizím jmen identifikátorů. K ničemu jinému namespaces neslouží. Bylo by proto trochu nelogické v takovém případě zavádět řešení, které by kolize identifikátorů opět zaváděly, protože se tím zhoršuje to, proč se namespace vůbec používají.

Nejlepší řešení je zkrátka bezkolizní syntaxe, což je to zvolili autoři PHP. Není třeba se drbat levou rukou za pravým uchem, a řešit kolize mezi funkcemi a třídami, když je možné zvolit bezkolizní syntaxi a nic neřešit. Lepší řešení IMHO nenajdete.

Jinak třída není dnes zakryta funkcí, to jste nepochopil syntaxi PHP. new foo() vytvoří novou instanci objektu foo a zavolá konstruktor, tedy metodu __construct(). Neexistuje žádná kolize, protože použijete-li identifikátor foo v kontextu, kde se očekává jméno třídy, jako třeba new foo(), nebo foo::metoda(), pak se zavolá metoda třídy foo. Zatímco volání foo() je jasně volání globální funkce a s žádnou třídou to nemá nic společného. Tím, že za něco zapíšete závorky, prostě voláte funkci, i kdyby existovala stejnojmenného něco jiného ne-funkce.

wdolek

na jmenne prostory sem se tesil… i pres vase argumenty ale nesouhlasim, ze to bylo vyresene "nejlepe jak to slo". nevim jak Vy, ale na me klavesnici je zpetne lomitku u backspace… cili, kdyz prehlednu vsecky ty skvele vyhody "skriptovaciho" jazyka, ktere uvadite a vyvracite me vytky, stale tu zustavaji dva problemy:
1) spatna citelnost kodu (lomitko precejen tak dobre graficky neodlisuje dve slova foobar proti foo.bar, foo@bar, foo::bar, foo:bar, foo^_^bar, foo (>'')> bar … a podobne :D)
2) spatna psatelnost kodu (hardwerovy handicap)

proc nebyl pouzit operator ":"?… jen proto ze je soucasti ternarniho operatoru? je tak tezke udelat nejaky parser, kterej zjisti pritomnost otaznicku ve vyrazu? a podle toho rozhodnout jestli se chova tak ci onak? asi by to nebylo tak elegantni, ale v PHP by se tohle vazne ztratilo

alancox

Myslím, že se pohybujeme už na subjektivním poli. Mě je zcela jedno, čím namespace oddělí, hlavně že budou. Vám to jedno není. Máte pravdu Vy i já.

Ohledně ternárního operátoru to mimochodem problém je. Ternární operátor má velmi nízkou prioritu, a jako takový by bylo docela obtížné ho rozumně zpracovat.

Ogg

To je tu zase asfaltu ….

Anonymní

Mne osobne je to v podstate jedno, hlavne ze konecne budou. Budu to psat jak chteji, ale mam takovy pocit, ze to brzy budu muset prepisovat.

Martin Soukup

PHP jen každým dalším krokem potvrzuje, že jeho vývoj řídí nevzdělanci, kteří nemají páru o tom, kam by se to mělo vyvíjet. Jejich rozhodnutí jsou bezkoncepční a náhodná.

Zběhnout se dá k Pythonu, Ruby, Javě, zůstávají jen lamy. A David Grudl.

Anonymní

Ale ne, takhle cerne bych to zase nevidel. Mozna nekde ve verzi 10.X.X uz bude PHP skutecne dobre vyladene. Zatim je to ale opravdu jenom takova hodne velka beta, kterou ale pouziva hodne lidi, protoze, a to se musi opravdu nechat, napsat neco maly dynamickyho jde v PHP hodne rychle. Ale jinak opravdu PHP neni plne dodelanej.

wdolek

:D musim se zastat DG. on se naopak snazi z toho neboheho PHPcka udelat neco pouzitelneho (narozdil od lidi, kteri plodi Zend Framework). docela mu fandim, ale obavam se, ze kdyz to takhle s phpckem pude dal, zachvilku uz nebude mit ani nejmensi cenu se jeste o neco pokouset. :P

Anonymní

PHP je predevsim pragmaticka volba. A jako takova je to porad velice dobra volba, jak jiste potvrdi kazdy pokrocily webovy programator

Znat jine jazyky se ale urcite vyplati. Mimo jine i proto, ze clovek pak lepe chape prednosti a slabiny PHP a celkove pise o dost lepsi kod

alancox

Ach jo, který jazyk je bez chyb?

Python – jazyk, který nectí zpětnou kompatibilitu a autorovi Pythonu je zcela u zadnice, že tím zbytečně přidělá problémy programátorům. Ne nadarmo je Python zván jazykem skriptovacím, nikoli programovacím. A bude hůř, protože autor Pythonu se bratříčkuje čím dál více s autorem Perlu a začínají si vzájemně notovat – takže je jasné, kde se inspiruje.

Ruby – fuj fuj fuj, jazyk, který nezvládl ani Unicode, a který rovněž nekompatibilně překopává zdrojáky. A konečné řešení stringů není nijak elegantní.Tedy výhrady jako u Pythonu + nezvládnutí stringů + nezvládnutí nativních threadů.

Java – asi z nich nejlepší, nicméně těžkotonážní dělo.

PHP je pragmatická volba. Sice pracovně v PHP nedělám, ale jinak ho používám, protože je z výše uvedených nejlepší – je v něm spoustu kódu k dispozici, nejlevnější hostong, všude to chodí, atd..

Jinak jestli mě nějaký rádobyguru Martin Soukup nazve lamou je mi u zadnice.

xxx

Bože muj, další stupidní výplod toho "všechno vím, všechno znám" dementa… ble, chce se mi zvracet :-(

alancox

Gratuluji, velmi přínosný názor.

wraith

Python je jazyk, který ctí zpětnou kompatibilitu a jeho vývojářům není jedno, že ji porušují. Dojde-li k narušení zpětné kompatibility, pak je to promyšlená a zdokumentovná událost, o které jsou vývojáři používající Python dlouhodobě dopředu informováni a mohou se na to v poklidu připravit.

Na rozdíl od vás ja PHP i Python pracovně používám. Python je dle mého soudu výrazně lepší jazyk. Při konzervativním používání jsou problémy s narušenou zpětnou kompatibilitou minimální u obou jazyků na srovnatelné úrovni. PHP na web volím z pragmatického důvodu, a to výrazně lepší podpora na web hostinzích. Jinak preferuji Python.

Protože dle vašeho vyjádření ani s jedním z těchto jazyků nemáte bohaté praktické zkušenosti, neměl byste být ve svých soudech tak kategorický, jen si tím děláte ostudu.

alancox

Python je jazyk, který nectí zpětnou kompatibilitu a jejich vývojářům je egál, že jí porušují. Nemusíte lhát zase tak okatě.

Na rozdíl od Vás já PHP i Python velmi intenzívně používám. Python je sice teoreticky lepší jazyk, a daleko raději bych ho viděl, kdyby ovšem tvůrce Pythonu byl mnohem odpovědnější, než je dnes – a uvědomil si, že praktickou použitelnost jazyka nedělají jeho estetické požadavky na konstrukce jazyka, ale především praktické vlastnosti jazyka. Jako je třeba držení zpětné kompatibility, či aspoň ucházející dokumentace, atd..

Jinak běžte prosím do politiky – Vaše nenápadná snaha zlikvidovat člověka s jinými názory tím, že tvrdíte "že člověk nemá bohaté praktické zkušenosti" – tím spletete jenom slaboduchého. I člověk s bohatými zkušenostmi nemusí být fanatik do Pythonu, a nemusí se modlit k Rossumovi, ale může také kriticky vidět skutečné problémy jazyka Python.

mambo

Musim se pridat k vetsine, jste tupec.

Z PHP jsem po nekolika letech utekl prave proto, ze napr. class foo a
function foo mohou existovat vedle sebe a parser se rozhoduje kterou si vybere
az podle new nebo jinych priznaku, ktere ale nejsou nikde nijak definovany.
Podle me by to melo byt jmeno jako jmeno a to co je dole, tak MUSI predefinovat
to, co je nahore. Dalsi z prasaren PHP.

Zpetne lomitko je totalni pitomost, uz vidim tu nadheru opravovat neco
v bash konzoli.

Utekl jsem od PHP k Pythonu prave z duvodu zpetne kompatibility, prave
z duvodu, ze to delaji lidi, co tomu rozumi a ne „chytraci“, co si precetli
tutorial nekde na php.cz a delaji chytry.

PHP neni jazyk, byl vytvoren jako templatovaci nadstavba nad C pro jednoduche
vytvoreni HTML stranek. Nic jinyho. Proto dodnes pisete na zacatku <?php

Je to jazyk bez koncepce, bez budoucnosti a doufam, ze brzy zmizi. Jedine, co
se mu do dneska povedlo, je naucit spoustu radoby „programatoru“ spatne
postupy a jeste horsi navrhy aplikaci.

Uz nikdy vice.

Pepa

PHP nepovazuji za jazyk pro aplikace, ale pouze nadstavbu k HTML strankam.
A Pokud tu nekdo pise, ze ma rad PHP a hazi spinu na Python (i jine jazyky), tak nemuze byt dobry programator. Tvrdit ze Python je na ustupu… a v cem ze jsou psane ty nejvetsi weby? FB ma backendy v Pythonu, Google se pythonem taky netaji, mnoho novych PC her ma rozsahle casti v pythonu, Seznam jede az na vyjimky v Pythonu… kdo chce vykon, pouzije C nebo Python.

Kdyz jsem s pythonem zacal, nemel jsem ho rad… ale to co jsem tehdy povazoval za slabiny, to dnes povazuji za prednosti.
– diky odsazovani prehledny kod
– striktni mod se neda vypnout
– skutecna objektovost a ne nejake nahrazky
– pomerne prehledny kod kde se neda moc prasit
– zpetna kompatibilita: nejdrive vyjde info v dokumentaci, pak verze s warningem o deprecated volanich a teprve po par letech vyjde verze, ktera hodi srozumitelnou vyjimku a odkaz do dokumentace.

U Pythonu mi vadi jen nezvladnuty ternarni operator. Udelat se sice da, ale oklikou. Nikdo tu nemuze tvrdit, ze je v pythonu spatne, protoze tam vubec neni. ;)

PHP: Jen kreten programuje v jazyce, kteremu nevadi pouzivani neexistujicich promennych, funkci, klicu, indexu, pad kterekoliv funkce zaignorujeme pres @ pokud vubec umi funkce vyvolat chybu… typova kontrola nulova, rozliseni asociativniho a indexoveho pole je sci-fi, o psani Cckovych modulu do PHP nemluve, neschopnost persistentnich objektu v ramci jednoho procesu webserveru (srandy ukladane na disk opravdu nepocitam), naprosto tragicka prace s kodovanim a unicodem, objektovost jen na oko, zoufale mala moznost debugovani… tohle neni jazyk na kterem by se mel clovek ucit programovat a ziskavat ty spravne navyky. PHP neni nejhorsi, ale obdivovat ho take nelze.

PS: programoval jsem jiz v assembleru, c, c++, pascalu, php, lisp, Java, asp, pythonu… takze srovnani mam.

Kdo nesouhlasi, at napise nejake dobre vlastnosti php… a klidne ty spatne pythonu :) ale nepouzivejte tu prosim py3.0, jako jediny argument.
Asi i nekdo napise, ze jsem debil… s tim se pocita.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.