Často se setkávám s názorem, že PHP je méněcenný jazyk pro amatéry. Jazyk pro programátory, kteří nemají na opravdové jazyky jako je Java, C a podobně. Je v tomto názoru něco pravdy? Je opravdu PHP méněcenným jazykem?
V PHP pracuji už několik let. Poslední dva roky jako hlavní vývojář rozsáhlého systému Ariadne3.0 ve firmě LifeWeb. Podle mých zkušeností má PHP celou řadu výhod i nevýhod. Pokusím se tady shrnout ty hlavní.
Výhoda: Snadné zprovoznění aplikace
Oproti jiným jazykům je v PHP velice jednoduché zprovoznit existující aplikaci na novém serveru. Stačí pouze nahrát zdrojové soubory a případně upravit nastaveníé připojení k databázi a podobně. Také úprava existující aplikace za provozu je velmi snadná – stačí změnit zdrojové soubory. Jediný potenciální problém se kterým jsme se setkali je odlišnost verzí. Oproti Javě a podobným jazykům je nasazení aplikace opravdu jednoduché.
EDIT: Dle názorů pod článkem se zdá pravděpodobné, že tato moje negativní zkušenost s Javou je spíše způsobena použitým Servlet containerem Tomcat.
EDIT: Úpravou aplikace za provozu mám na mysli především její vývoj a ladění.
Výhoda: Asociativní pole
PHP má velice zajímavě řešené ukládání složitějších strukturovaných dat v podobě asocitivních polí. Jejich univerzálnost a především snadnost použití mi často v jiných jazycích chybí. V mnoha případech je práce s tímto typem dat v PHP mnohem příjemnější než v ostatních jazycích, kde je často nutné řešit velké množství činností okolo, které odvádějí pozornost od samotného řešeného problému.
EDIT: V mnoha jiných dynamickýcj jazycích je práce s daty srovnatelně jednoduchá. Například uvedu Python.
Nevýhoda: Nekoncepčnost jazyka
Jednou z hlavních nevýhod PHP vidím v jeho poněkud neukázněném vývoji. Jednotlivé funkce nedodržují společnou koncepci. Nejvíce do očí bijícím příkladem je pojemnování funkcí, kde je používána celá řada stylů jako například jméno_funkce i JménoFunkce. Podobné funkce mají často odlišné pořadí parametrů a podobně. Jde o zřejmý protiklad knihoven v Javě, u nichž je na první pohled patrné, že byly vytvářeny s rozmyslem a podle společných zásad.
Výhoda: Množství knihoven pro nejčastěji používané činnosti
V PHP je již v základu pokryta velká škála činností, na které se při vývoji webových aplikací nejčastěji narazí. Často se mi v jiných jazycích stalo, že jsem narazil na složitý problém jehož řešením jsem strávil i několik hodin, a který by se v PHP dal vyřešit několika řádky kódu. Nejde ani tak o šíři dostupných knihoven jako o to že přesně vystihují to co je často třeba.
Nevýhoda: PHP nenutí psát kvalitní kód
PHP po programátorovi nevyžaduje, aby jeho kód byl kvalitní. Umožňuje velkou škálu "špinavých triků, které mnozí s oblibou využívají. Výsledný kód je pak ale mnohdy až nečitelný (nepříjemná zkušenost s několika externími PHP programátory). Zejména pro začátečníky myslím není PHP příliš vhodné, protože je nijak nevede k vytvoření správných programátorských návyků.
Výhoda: Hosting
Jednou z největších výhod PHP je jeho široká podpora na hostingových serverech. Oproti jiným možnostem serverového scriptování je PHP jednoznačně nejrozšířenější.
Nevýhoda: Výkon
Jednou z hlavních nevýhod PHP pro vysoce zatěžované aplikace je jeho výkon. PHP je interpretovaný jazyk a je tedy překládáno vždy znovu pro každý příchozí požadavek (existuje ale několik optimalizátorů, které podporují ukládání přeloženého byte-code – ovšem podle našich testů ani tak není nárůst výkonu příliš patrný). Hlavním problémem, alespoň z mého pohledu je, že neexistuje žádný jednoduchý způsob jak sdílet data mezi jednotlivými požadavky. Dochází pak k situaci, kdy jsou stejná data zbytečně dotazována a zpracovávána současně několika příchozími požadavky současně.
EDIT: Nevýhoda: OOP
PHP sice nabízí možnost objektově orientovaného programování, ale jeho možnosti zdaleka nedosahují možností čistě objektových jazyků.
To je prozatím vše na co jsem si vzpomněl. Pokud přidáte nějaké vlastní postřehy budu rád a začlením je do tohoto výčtu.
A závěr?
Podle mého názoru je PHP mladý jazyk s velkým potenciálem. Musí ale překonat celou řadu dětských nemocí (nekoncepční vývoj, nejednotnost, …) než se bude moci srovnávat například s Javou. Přesto myslím že je na správné cestě a jeho samotná koncepce je velice dobrá. Právě vyvíjené PHP6 nás může příjemně překvapit. PHP se nehodí pro každou aplikaci, ale myslím, že rozhodně má širokou škálu využití. Především podle mě nezáleží ani tak na samotné jazyku ale především na programátorovi a jeho schopnostech jazyk správně využít.
EDIT: Protože se zdá, že jsem se nevjádřil zcela jasně ještě něco dodám. Dle mého názoru je PHP jazyk se spoustou chyb a v současném stavu rozhodně není srovnatelný s jazyky jako je Java, Python a podobně. tyto jazyky jsou na mnohme vyšší úrovni. Podle mého názoru je ale koncepce na které je PHP postaveno poměrně rozumná a pro řadu aplikací výhodná – především menší projekty.
PHP5 je poloobjektovy paskvil ktery neumi ani pretezovat,
normalne pouzivam java/bash/c, letos jsem musel delat semestralku v PHP a myslel jsem ze se zblaznim:
clovek pocita s pretezovanim a objektovou praci s POST a ono nic, clovek pocita ze se k databazi pripoji pres objekt a ono ne ono je to staticke fce, tak bude mit aspon exception .... a tak dale
zaroven s tim jsem delal semestralku na prekladace z C do pythonu (jen cast jazyka), psal jsem ji v jave, tak si clovek vytvoril abstraktni tridy, pretezoval jejich funce a pozil factory,... proste uplne jiny level
co z toho vyplyva: PHP je dobry jazyk, ale bez frameworku ne to neobjektovy jazyk, java je slozitejsi ale ukaze clovekovi uplne jiny svet
-> php je pouzitelny na male aplikace (ale ne na mode; ano controller), takove bastleni, ale kvalitni aplikace, ktere pocitaji s chybami vyvojaru a drzosti uzivatelu v php je priliz slozita
Zprovozneni: Nechapu, co je sloziteho na deploy jednoho WARu pres web / jeho nakopirovany do deploy adresare v pripade Javy? Naopak mam celou aplikaci jako jeden jediny soubor...
Upravovat aplikaci za provozu teda docela prasarna. Navic JSP jsou kompilovane on-demand, takze u Javy to jde omezene taky :-D
Dal bych povazoval za nevyhodu ruzne pokroucene a omezene OOP u PHPka.
A nakonec dost pochybuji, ze PHP se bude moci nekdy srovnavat s Javou - a i myslim, ze to neni cilem.
mafo: V PHP5 už se dá objektově pracovat celkem rozumně - smzřejmně to ale není Java. Co se týče přetěžování tak to v PHP možné je, jen se řeší trochu jinak než v Javě (typ parametrů se rozliší až uvnitř funkce explicitně).
Objektová práce aexception je přesně to na co narážím v "Nevýhoda: Nekoncepčnost jazyka". Mnoho novějších součástí (napadají mě například parsery XML) používá objektovou práci a excpetion, ale starší součásti je nepoužívají. ČEtl jsem, ale že v PHP6 by se již mělo začínat se sjednocováním.
S tím, že je pro PHP potřeba využít frameworky souhlasím a naštěstí se již takovýchto kvalitnějších frameworků začíná několik objevovat.
S tím, že nejde v PHP dělat složitější aplikace bych nesouhlasil. Sám se vývoje jedná takovéto aplikace účastním. Vyžaduje to ale od vývojářů dodržování určitých zásad a použití frameworku.
Ja se spis setkavam s nazorem, ze PHP je pro mensi projekty. Taky jsem pachal v PHP (od piky, bez frameworku), ale potom, co jsem pricichl k Jave ee, nedal bych na ni dopustit. Zasadni nevyhodu bych spis videl v nemoznosti navrhu MVC zabudovanem primo do zakladu php, je to imho dobra koncepce. A kdyby to bylo zpracovane kvalitne a dobre optimalizovane, hodne by to pomohlo, stejne tak ORM primo v zakladu. Ale to by se takovymahle vecma zase sestrelila rychlost a jednoduchost. Navic PHP je jeste porad funkcionalni programovani, jestli se nepletu (skoncil jsem u php4)? Taky body do plusu pro Javu.
Mno a napada me, jestli by php nemelo byt srovnavane spis s ruby (pripadne kolejnatym fw), nez s javou?
Kára: Již sem několik Aplikací v Javě na servery nasazoval a problémů s eobjevila celá řada. Kdybych zmínil ty nejčastější tak např. Tomcat odmítl použít knihovnu, která byla připojena k aplikaci, ale tvrdohlavě používal starší verzi, kterou měl ve svém common. Nebo klasický problém s PermGenSpace. Jeho řešení sme nakonec našel, ale trvalo mi to několik hodin.
Úpravou za provozu nemyslím ani tak úpravy v produkčním nasazení jako spíše při ladějí a vývoji.
Objektová práce u PHP je ještě poměrně nedotažená, ale v PHP5 už je použitelná na rozdíl od PHP4. A Do PHP6 se chystá několik dalších zlepšení.
Srovnávat s Javou jsem nemyslel tak, že by se dalo využít na stejnou oblast problémů. Spíše, že se stane uznávaným jazykem ve svojí oblasti - tj. jednodušších webových aplikacích.
je, koukam, ze tu pribyly nazory, nez jsem odeslal :-)
a vypada to, ze vsichni jsou pro nutnost nejakeho fw, ze php je jen Control vrstva... souhlas. jen ty fw by to chtelo uzce specializovany a hlavne funkcne provazany, ne ohromny baliky plny vsemoznych helperu a specialnich funkci (ted mam na mysli treba zrouta typu Zend). proste jeden fw dobre ovladajici ORM, dalsi kvalitne zpracovavajici sablony...
shmoula: Nemožnost návrhu MVC? Naše aplikace MVC používá. ORM přímo v základu byhc taky uvítal my jsme si na to psali vlastní framework.
Od PHP5 již jde psát poměrně slušně objektově. Naše aplikace je kompletně objektová a nenarazili sme na žádné vážnější problémy, proč by nemohla. V PHP4 se ale objektově ještě psát nedalo - tehdejší OO model PHP bylo něco strašného.
Srovnání s Javou sem použil hlavně proto že nyní pracuji práve v PHP a v JAvě s Ruby a podobnými nástroji sem se seznámil jen základně.
[5] pro jednodussi aplikace urcite, ale opravdu pro jednoduchy (vyplyvajici z nazvu tohoto jazyka - homepages ;-) ), protoze kdyz se na php postavi aplikace a potom je nutnost ji rozsirovat a zvetsovat a nakonec se to rozroste do velikeho projektu, tak clovek zacne zjistovat, ze se jaksi ztraci (i pokud nepise kod jako cunatko :-) ). takze spachat treba jednoduchy RS nebo blogsystem, proc ne?
[8] NO jde to použít i pro složitější aplikace. Ale je nutno použít kvalitní framework (nebo si napsat vlastní) a především dodržovat zásady SW inženýrství a mít kvalitní návrh.
Příklad: Naše firma má vlastní systém/framework Ariadne3.0 a provozujeme na něm již několik E-shopů, intranetů a rozsáhlých dynamických stránek.
[7] on prave ten prechod je problem. ja k php prisel jako Cckar, k verzi 4 a zacal jsem delat pomerne velky projekt - funkcionalne. pak se to rozrostlo a na OO verzi se nepreslo, protoze se vyvoj uzavrel, bohudik. jeste ted se bojim, ze budu muset tahat z svn tento kod kvuli nejakym upravam. kdyz se ted koukam zpetne s nejakymi "zkusenostmi" s javou, tak si rikam, jak by se to dalo udelat efektne a hlavne rychle, kdyz vzpomenu na ty "pouzite hacky" :-)
Já myslím, že zásadní výhodou PHP je nabídka hostingu pro webovky. To je jeho velká a řekl bych, že jediná výhoda.
Ostatní zde popsané přednosti mají i jiné jazyky. Dostatek knihoven je i pro Javu, Python, Ruby... Asociativní pole mají všechny ostatní taky (a nebrání jim to mít i nativní indexované pole). Výkon mají dynamické interpretované jazyky řádově stejný, Java je trochu někde jinde.
Když vidím, jak lidé prskají na nekompatibilní Python 3 (s dobře připraveným plánem přechodu), tak se musím u PHP smát - pomalu každá major verze se má podobat jinému jazyku, minor verze s "opravami" bourají aplikace...
PHP je bastl a jeho vývoj chaos. Nicméně jsou pro to hostingy a dobrý soft se dá napsat i v tom PHP. Ale nevím, proč bych to dělal, když můžu psát v Pythonu, Ruby, Javě+Groovy, Céčku++, Déčku a já vím v čem ještě :-)
[12] Asocitivní pole mají samozřejmě i jiné jazyky. Nikdy sem neřekl, že ne. Jde spíše o to jakým způsobem lze s nimi v PHP snadno pracovat - ve srovnání například s prací se strukturami jako je Mapa Map v Javě.
Major verze PHP jsou opravdu skoro pokaždé naprosto odlišné. Nevím jestli to je nevýhoda nebo jestli to spíše dokazuje snahu o zlepšení. Minor verze bourající aplikace? Tak tohle se nám v PHP5 ještě nikdy nestal, ale možná sme jen měli štěstí.
Ano aktuální vývoj PHP je chaos viz Nevýhoda: Nekoncepčnost jazyka. Ale myslím, že poslední dobou se to začíná ubírat správným směrem. Zdá se že vývojáři si konečně začali tento problém uvědomovat. Nezbývá ale něž počkat zda se jim to povede.
[14]. Špatně jsem se vyjádřil. Jistěže asociativní pole v PHP je příjemnější než nějaká Map z Javy. PHP a Java jsou dost jiné. Ale přímí konkurenti PHP - dynamické skriptovací jazyky jako Python, Ruby a Perl, ty asociativní pole mají.
Minor verze bourající aplikace: jednalo se o nějaké změny v rozhraní pro mysql...
Já neříkám že PHP je Antikrist. Víc než na jazyku záleží na programátorovi. Ale PHP je dobré opravdu jenom v tom hostingu a záleží, kolik vám na této vlastnosti záleží. My máme ve firmě vlastní server a jedeme na Pythonu, který ja jakožto jazyk prostě mnohem lepší.
Že se vývojáři PHP snaží jazyk vylepšit je sice bohulibé, ale nekompatibility jsou pro údržbu aplikací mor. Prostě PHP je zacíleno na programy s krátkým životem, to je fakt.
[16] A to je případ jen PHP? V každém jazyku je možnost překlepem sestřelit aplikaci. Hlídat existenci proměnné v PHP můžete snadno. A zápisem do proměnné do které jste zapsat nechtěli - no to může položit úplně jakýkoli program ne? V PHP spíš vidím například v tom, že neexistuje žádný způsob jak využívat implicitní typovou kontrolu při přiřazování. Což ovšem nebrání explicitní typové kontrole.
[17] No souhlasím, že Python v tomhle je s PHP nastejno. Měl sem na mysli spíše Javu. Python jsem pro webové aplikace ještě nepoužíval - spíše ho používáme pro zpracování dat a na vytváření údržbových scriptů.
Přesně to se snažím říct. Nezáleží na jazyku, ale na způsobu jeho použití. To že se v PHP dá psát hodně špatně neznamená, že samotné PHP je hodně špatné.
[7]: Tak mi tady nevykládej něco o složitým deployi, když máš jen základy. Kolega nahoře má pravdu: prostě nahraješ jeden WAR. Dále: Tomcat není aplikační server. Je to jen Servlet/JSP Container a ještě pěkně mizernej. Co se Toho problému s knihovnami týče -- opět -- Tomcat stojí za hovno.
Ad PHP: v PHP jsem začínal, pracoval v něm asi tři roky a pak ho slavnostně opustil. Jak se mi ulevilo! Větší bastl jsem nezažil.
Příklady z praxe:
PHP.INI -- noční můra. Tisíce hejblátek, samý neužitečný hlouposti jako magic_qute_gpc a tak podobně. V každém buildu PHP se tyto volby chovají jinak (resp. jejich kombinace). Díky tomu je deploy noční můrou.
Knihovny -- knihoven je dost, ale nemají jednotné API. Každou knihovnu se musím "učit" a když chci mít aplikaci čistou, musím si napsat wrappery do mého coding-stylu. Ztráta času.
Jazyk jako takový -- to, že to hoši ve verzi 5 vylepšili a do verze 6 chystají drobná doladění, stále to není objektový jazyk. Mohli se vydat třemi cestami: prototypy (JavaScript), C++ styl nebo Java. Šli svou vlastní cestou. Mimochodem -- to přetěžování na základě rozpoznávání počtu argumentů a jejich typů -- to není přetěžování -- to je nesmysl! A když jsme u těch typů -- až bude PHP plně typové (bude tuto možnost nabízet alespoň tak, jako Perl 6), pak se o to začnu zajímat; do té doby pro mě PHP neexistuje. Tři roky to stačilo až až.
Nevím proč všem vadí, že je PHP neobjektové (teda - něco jako objekty tam je, ale...). Pro malé webové programy, na které je už podle názvu php určeno, se prostě objekty nehodí a akorát by tam překážely. Jsem vůbec tak trochu proti tomu současnému trendu procpat OOP i tam, kde se zjevně nehodí.
[22] Mám jen základy Ruby. V Javě sem už nějakou dobu pracoval. Pravda moje zkušenosti možná vycházejí z toho že sme zatíp používali vždycky Tomcat. Pokud to jinde funguje lépe rád tuhle svoji námitku stáhnu.
Bastl není vizitkou jazyka, ale programátora.
php.ini - zatím sem nazažil na nic co by mezi verzemi způsobilo nějaké zvláštní problémy, ale možná sme jen měl štěstí.
Ano přesně nejednotnost API je jendou z největších nevýhod PHP jak sme ostatně sám napsal.
Nechápu proč by přetěžování podle rozpoznání typu argumentů měla být blbost? Jen proto že to má jinou syntaxi než v Javě? Explicitní zápis má svoje jasné neýhody (především je nutné ho napsat), ale i některé drobné výhody. Ne například máme funkci, která je schopná přijímat různé typy parametrů a následně je zpracovat. Zpracování se až na několik drobností v několika částech kódu pro různé typy parametrů neliší - je tedy jednodušší napsat v alogoritmu několik if než psát několik přetěžovaných funkcí.
V PHP6 má být možnost určení typu proměnné. Bude sice stále existovat typ variant, který bud moci nést libovolnou hodnotu, ale bude možné proměnné určit její typ a pokud a přiřazení hodnoty jiného typu způsobí chybu. Je to jedan z fetures, kterou taky poměrně uvítám.
Mám pocit, že vývoj PHP vede k něčemu podobnému jako teď prožívá Python. Až se bude připravovat php 7 (nebo 8, 10, 15 ...), tak se:
- zahodí kompatibilita se staršími verzemi
- udělá se konverzní program ze starých verzí na novou
- pořádně se dotáhne objektové programování
- sjednotí se syntaxe funkcí
- proberou se knihovny a explicitně v programu se umožní zavádět jen ty, které potřebuji
- zavede se typová kontrola proměnných
- umožní se kompilovaný nebo bytecode běh
S PHP jsem strávil mnoho let a udělal v něm opravdu hodně webů. Pro menší projekty to jde, ale jakmile děláte něco trochu většiho, tak je to horší. Před asi 2 lety jsem zkusil RoR, ale měl jsem velké problémy s deployem (vím, že teď je to lepší), ale jazyk je hodně kryptický a nesedí mi ... před asi 3 mesíci jsem dal šanci Pythonu (+ Django) a čím víc ho poznávám, tím víc se mi líbí a doufám, že u něj zůstanu. Prostě je to asi o povaze programátora, každému sedí jiný typ práce a proto i jiný framework a jazyk.
[24] Ad deploy: Problem s knihovnou neni o jednoduchosti/slozitosti deploy - pokud budete mit v PHP v include path serveru stejne pojmenovany soubor jako includuje vase aplikace ze sve cesty, tak budou konflikty taky.
To uz bych mozna vycital IMHO trochu silene JNDI - procpat aplikaci do namespace nastaveni vyzaduje nakonfigurovat to konzistentne na nekolika ruznych mistech a kdyz to na jednom udelate blbe (preklep, opomenuti), tak obcas nedostanete zadny warning, ale promenna proste neni a musite zurive hledat proc...
[25]
- zahodí kompatibilita se staršími verzemi
Ta se mezi major verzemi zatím nikdy příliš nedodržovala.
- udělá se konverzní program ze starých verzí na novou
- pořádně se dotáhne objektové programování
Je plánováno do PHP6.
- sjednotí se syntaxe funkcí
Snahy jsou zda už teď, ale opět se ukazuje platnost zásady, že něco přidat je jednoduché, ale něco odebrat už ne.
- proberou se knihovny a explicitně v programu se umožní zavádět jen ty, které potřebuji
- zavede se typová kontrola proměnných
Je plánováno do PHP6.
- umožní se kompilovaný nebo bytecode běh
Ten je možný už teď díky optimalizátorům - jde v podstatě o záležitost konkrétní implementace na serveru.
[29] Já používám Python+Django a jsem spokojený. Neříkám, že je to nejlepší soft pod sluncem (to je Unix:-), ale na vývoj webů patří ke špičce. Python je dost dobře navržený jazyk a Django zapadá do jeho filozofie, je stabilní a přehledné.
V Pythonu lidem často vadí významové bílé znaky (odsazení). Pokud bys tuto filozifii nepřijal, tak asi doporučuji Ruby a RoR.
Java se na webovky IMO moc nehodí. Java je dobrá na nějaký kritický backend, přece jenom, statická typová kontrola se může hodit. Ale pro většinu webových aplikací se hodí dynamický, lehčí přístup. Třeba i to ošklivé PHP s nějakým dobrým frameworkem :-)
[29] Určitě na to kouknu. Python už sem používal poměrně hojně. Významové bílé znaky mi nevadí - ale je potřeba mít zapnuté zvýrazňování bílých znaků - lovit tabelátor mezi mezerami není zrovna zábava :-)
Já se aktuálně zabývám právě použitím Javy pro vytváření webových aplikací. Konkrétně Spring Framework. Přijde mi to jako docela zajímavý přístup.
Myslím, že docela zajímavou možností by byla nadstavba Springu o několik jednoduchých kontrolerů pro často používané součásti webů (autentizace, ověřování práv, dnynmické přepínání lokalizace, navigace, ORM, ...) a jeho kombinace s Jythonem jako skriptovacím jazykem pro vlastní business. Zvažuji to jako téma pro moji diplomku.
[30] Já jsem skoro čistý pythonista a do webů moc nedělám. Chtěl bych ale podotknout, že nad JRE je možné taky provozovat "lehčí jazyky" - např. Jython, JRuby, Groovy (+ Grails)... Osobně Ruby moc rád nemám, Jython je docela pozadu a Groovy mi přijde jako parodie na Ruby s C-like syntaxí (5 druhů zápisu řetězců, to snad nemá ani nikde jinde obdobu). Ale docela se mi líbí Scala - perfektní kombinace OOP (parametrizované třídy, dědičnost mixinů, všechno je objekt) a FP (funkce vyššího řádu, typová inference, map/filter/reduce, volitelně líné vyhodnocování, pattern matching apod., docela podobné ML, ale pochopitelnější a méně exotické). Typy se píšou jenom tenkrát, pokud je to nezbytně nutné, díky inferenci si kompilátor většinou domyslí, co jsi chtěl říci. Jde o staticky typovaný jazyk (rychlost programů je srovnatelná s Javou), ale právě díky tomu, že má inferenci, to tolik nehází klacky pod nohy. Má nadstandardní podporu XML, což se využívá ve webovém frameworku Lift. V něčem lepší než Python (konzistentněji navržený, zejména FP je v Pythonu (bohužel asi schválně) trochu zkriplené. Zkouším ve Scale řešit mimo jiné matematické problémy z projecteuler.net a můj dojem je takový, že v Pythonu bych to vyřešil o kapánek pohodlněji, ale jde to, s Cčkem ani s Javou se to srovnávat nedá. Takže asi tak - těch cest je opravdu hodně, jenom si vybrat tu optimální...
[33] Samozřejmně že čím méně kódu tím lépe. Ale o to právě jde než mít několik v podstatě identických metod mám jen pár if a vše je na jenom místě. Ale tady už se nedá rozumně diskutovat bez konkrétní ukázky problému. Lze totiž najít případy kdy je lepší jedna i druhá varianta.
PHP je pro začátečníka - a hlavně příležitostného programátora - úplný dar z nebes :-). Nejsem z oboru IT, ale obchodník, který potřebuje udržovat nevelkou firemní databázi a nechce sáhnout po aplikacích, jako je např. MS Access a rád pracuje na Linuxu. Jsem člověk, který o programování nevěděl vůbec nic s výjimkou pár součtů dat v tabulkovém procesoru .. Stačilo pár knížek (také něco o SQL jazyku), nějaký web, krátký čas a aplikace byla na světě. Využívám ji již 7 let a naprosto stačí. Pro velké projekty PHP asi není, ale existuje mnoho menších, jako mám já.
Ještě k té Scale, kdyby to někoho zajímalo, tři poznámky:
1. Projekt v Liftu vytvořený v Mavenu se dá importovat do Netbeans 6.5 a pak je s ním poměrně krásná práce
2. Scala je DSL pozitivní, asi více, než třeba Ruby (opět díky inferenci definované např. v Companion objektech a díky daleko větší volnosti ve volbě názvů (operátory jsou normální metody a je možné si vymyslet vlastní).
3. Syntaxe je trochu podobná Javě, ale přechod není tak hladký, jako u Groovy, ale dá se na to zvyknout rychleji, než na Python, Ruby apod.
Co sa tyka vykonu tak sa to da riesit aj na urovni fw (zdielanie dat pri requeste).A v pripade nutnosti este vyssieho vykonu tak s da napisat aj vlastny modul do php/zendu v c/c++.
Mimochodom ma este napadlo,mozno skusit pouzit na nejake male weby Luu.Je to jeden z najrychlejsich interpretovanych jazykov.
[39] Asi jsem to explicitně neuvedl, ale Scala se používá zejména nad JRE a dokáže bez problémů importovat a používat javovské třídy a tím pádem má přístup i ke všem javovským knihovnám. Ve skutečnosti to je hlavní důvod, proč jsem si se Scalou něco začal, protože jsem byl frustrovaný situací ohledně knihoven např. pro OCaml, zatímco u Pythonu může někdy trochu brzdit rychlost (poměrně velmi pomalý běh PyLintu, který odchytí problémy vzniklé dynamickou povahou Pythonu, je klasický příklad. Napadlo mě řešení té pomalosti pomocí diskové cache, ale narazil jsem na problémy s picklováním uzlů AST stromu).
Podpora v IDE je poměrně dobrá, ikdyž já mám zkušenosti skoro výhradně s NetBeans, plugin do Eclipse jsem jenom letmo vyzkoušel a IDEA nepoužívám. Pomocí té kombinace Maven / NetBeans je možné jak poměrně snadno testovat projekty Liftu, tak i vytvářet přímo WAR soubory jako z javovských projektů. WAR se nacpe do adresáře nějakého servletového stroje a jede to.
Scala ale běží i nad .NETem a dá se v ní dokonce skriptovat, ikdyž oproti klasickému #!/usr/bin/env neco je třeba trošku obskurnější hlavička.
S clankem vicemene souhlasim, s cim vsak nesouhlasim je optimisticka vize nasledujiciho vyvoje PHP.
Jak lze videt, vetsina jeho uzivatelu jsou amateri.
Vyvojari jazyka vzdy uspokoji vetsinu (amatery) a proto situace neni takova, ze se vsechny potize odstrani a jazyk zmeni na Python. Naopak, priste to bud udelate PHP cestou, nebo to neudelate vubec a rec je o tom, ze PHP se naprosto odtrhlo od *libovolnych* standardu a zazitich postupu v kteremkoli jinem jazyce a zacina se vse resit zcela unikatnim zpusobem, ktery pochopitelne vybocuje jednoduchosti implementace a tim, ze je vzdy mnohonasobne snadnejsi feature v PHP uzit chybne, nez korektne.
Nadmerna abstrakce a frameworky v PHP praci neusnadnuji, udrzbu neusnadnuji a naopak vse komplikuji a vyvoj software oddaluji nekolikanasobne.
Jedine vyuziti PHP ktere "neboli" je opravdu jen preprocessing (X)HTML. Vse ostatni v nem "boli" a bude "bolet" vice.
Co já (coby sys-admin) považuji za problém PHP jsou ty prasárny hluboko uvnitř kódu... Zeptejte se skoro kteréhokoliv správce balíku PHP...
Jinak PHP moc nemusím, dělá věci po svém a to většinou divně, samozřejmě na drobné weby není moc jiná volba, protože hostingy nejsou, ale jinak se tomu snažím vyhýbat... Mnohem radši Perl...
Ohledně asociativních polí, pokud pominu asm a C, který z dnešních skutečně mainstreamově používaných jazyků nemá asociativní pole (a univerzálnější s většími možnostmi, než je v PHP)? Nějak si nemůžu vzpomenout. Bohužel PHP má asociované pole pouze s klíčem na bázi celého čísla a řetězce, třeba i to staré C++ umožňuje jako klíč asociovaného pole použít cokoli, třeba objekt. Naopak mi právě v PHP vadí to, že mají omezenou podporu asociativního pole – s velmi oemzenými možnostmi typů klíčů.
Jinak já PHP používám a nemám s tím problém, jsem za něho rád, protože je všude, je multiplatformní, jednoduchý, a efektivní.
Jako výhodu PHP, která nebyla uvedena, bych přidal obrovské množství existujícího kódu, knihoven, frameworků, redakčních systémů, apod..
Nevýhodou PHP ovšem je, že se kolem něho točí zpravidla ti nejhorší programátoři s těmi nejhoršími návyky. Často v něm dokonce „programují“ i grafici, HTML kodéři, atd.. Na kvalitě velké části kódů je to znát, ba dokonce i velmi kvalitních frameworků – proto jsem osobně od jejich používání upustil zcela.
To je pak zdrojem všech těch báchorek o PHP – kvalitních programátorů kolem něj nenajdete mnoho (a pokud, tak intenzívně programují souběžně v jiném jazyce). PHP převzal funkci Basicu – jazyka, na kterém často lidé zkouší programovat.
Další smůlou je, že bohužel na hostinzích s PHP běží velmi omezený databázový stroj, který se zove MySQL. Který bohužel neumí ani pořádně referenční integritu, doménovou integritu, a jeho další vlastnosti jako triggery, procedury, atd.. mají tak obrovská omezení.
Jinak v PHP se dá psát hezky, kvalitně, PHP to nevylučuje.
Nazor ze php je pro zacatecniky je absolutni blbost..ma sve pro a proti jako kazdy jiny jazyk..pro zacatecniky se rika proto protoze je vsude nesmirna spousta tutorialu a prikladu ma perfektni dokumentaci a lide maji moznost se jej rychle naucit..coz o ostatnich se rici neda..sam jsem vyzkousel spoustu jazyku php,java,python,c,c++,atd..kazdy je v necem silny a v necem ne..a je uz jen na kazdem co chce programovat a co pouzije za jazyk..
Ja zacinal na PHP. Po nekolika letech mi prislo velmi neprehledne. Na mensi projekty ok, ale hledat chybu v nejakem velkem frameworku byla docela silenost.
Pak jsem presedlal na Python s Cherrypy. Razem se vysledny kod zjednodusil, zprehlednil a zmensil. Nejaka cast je samozrejmne dana i vyvojem programatora.
No a nyni jsem skoncil u Javy. Aktualne se snazim pouzivat Tapestry a nemuzu si to vynachvalit. Perfektni moznost debugovani aplikace, hezky navrh, vynucena struktura, takze kazdy muze ihned pokracovat, eclipse a ficury jako Ctrl+1, moznosti psani unitTestu standardnim zpusobem, Java. Toto vse zabezpecuje, ze neni nutne redeploy kazdych 5 minut. Testy, silna typova kontrola, vyjimky apod. podle me ukazou valnou vetsinu chyb uz pri vyvoji.
Nechapu co kazdemu vadi na Tomcatu. Kdyz se nastavi tak funguje dobre. Co pouzivate vy? Jetty? V Jbossu je stejne integrovan tusim jeden z nich.
Je to na uhlu pohledu, dobry programator napise dobry kod v PHP stejne jako v jinem jazyku.
Osobne jsem se po tom co jsem pouzival Python, Ruby apod. vratil k PERLu a jak obcas nadavam na ten jazyk - to nechtejte slyset - zlaty PHP oproti tomu (v PERLu clovek nema poradne ani objekty, natoz treba vyjimky - jsou tam moduly, ktery se to snazi simulovat, ale ne moc uspecne, kdyz to neni podporovano primo danym jazykem).
Kdyz je v praci vetsina veci napsana v PERLu, tak clovek nema na vyber.
PS: Mnozstvi knihovem mi prijde ze uz neni podstatny argument, kdyz jsem delal v Ruby jako pomerne mladem jazyce, tak jsem nasel taky knihovny skoro na vsechno co jsem potreboval, a co teprve u starsich jazyku jako Python, PHP, PERL ...
[49] Opět to zopakuju u asocitivních polí sem měl na mysli především snadnost sjakou se používají. Jinak jako klíč lze v podstatě taky použít cokoli, jen je nutné si sám definovat vyhledávací funkci - reprezentovat hodnotu objektu například řetězcem. V takovém případě lze využít poměrně rychlého vyhledávání v polích, které je v PHP. Nebo přinejhorším pokud by byl převod na jednoznačný řetězec problém lze vyhledávat sekvenčně. Případně použít něco jako hash nebo nějaké jiné optimalizace. Všeho všudy je to několik řádků.
"To je pak zdrojem všech těch báchorek o PHP – kvalitních programátorů kolem něj nenajdete mnoho."
"Jinak v PHP se dá psát hezky, kvalitně, PHP to nevylučuje."
Tohle přesně vystihuje to co jsme chtěl tímhle článkem říct.
[47] Pokud je to uprava JSP, tak nevidim rozdil mezi PHP a Javou.
Navic, pokud u vas probiha vetsina prace stylem "upravim zdrojak, kouknu se na vysledek", tak je nekde neco spatne... U mne probiha prace stylem "napisu to, pustim to, opravim 1-2 mensi chyby, bezi to". Tech ladicich obratek az tolik nepotrebuju.
[48] No vidíš, já bych zase perl nepoužil na nic většího než nějaký drobný maintenance skriptík. Co se týká nevýhod PHP, tak v tom bych se víceméně shodl s autorem článku (možná s výjimkou té výtky k (ne)objektovosti, od PHP5 už to je použitelné), ale upřednostňovat pro weby perl je podle mě anachronismus.
Chi, chi. Musím se usmívat, když vidím, kam zase ta debata uklouzla. Já dělám primárně v C++ a jsem zvyklý na objekty. Ty jsem v PHP 5 našel a bez problémů využil (ikdyž ne důsledně vždy).
Žádně "PHP-prasárny" jsem IMHO neudělal, neboť (a) nevím jak je dělat nebo (b) jsem si vědom, že se budu někdy chtít zpětně v kódu vyznat.
Přátelé, uvědomme si, že světem hýbe slovo "EFEKTIVITA"!!!
Každý program je dobrý, když splní dobře svůj účel za rozumné náklady (= čas práce).
K tomu je nutno samozřejmě odhadnout i efektivitu budoucích úprav, pokud vůbec někdy budou! Někdy je prostě efektivnější napsat program co nejrychleji s tím, že pokud bude potřeba větších změn, tak se přepíše už se znalostí všech požadavků. Zvláště je tento přístup opodstatněn v případě, že zákazník sám neví, jaké fíčury bude od našeho SW chtít. A přiznejme si - většinou to neví.
[56] Yossarian: To nejsou zrovna dobré příklady funkcionálních jazyků, alespoň ani jeden z nich není čistě funkcionální. Lisp je stejně tak funkcionální jako třeba procedurální nebo objektový, Scheme má minimálně procedury pro vedlejší efekt. Typický a zároveň čistě funkcionální je třeba Haskell.
[57] Ohledně asociativních polí – mluvíme o používání, ne o hackování. Ono není problém si asociativní pole dodělat i do toho asm a C, kde nejsou v jazyce vůbec. Další problém v PHP při nahackování začnete mít se syntaxí. Napište do hranatých závorek třeba $a[new mujobjekt(1,2,3)] – a nepobere to syntaxe PHP. Pak je to hackování asociativních polí k ničemu. A přitom u toho starého C++, u Pythonu, C# a vůbec kde si vzpomenu tuhle syntaxi použiji.
Když už jsem u toho, vůbec špatná syntaktický analýza PHP. Například parser v PHP nepobere tohle:
$pocet = $db_connection->query($sql)->fetchRow()['cnt'];
Prostě (ačkoli to jiné jazyky zvládnou) – v PHP je to nutné rozepsat na dva příkazy, protože jeho syntaktický parser je nedokonalý.
Jinak v PHP se dá kvalitně psát, ale jak jsem psal výše – kolem PHP je velmi mnoho mizerných programátorů, a také velmi nízké ceny za práci v PHP nutí kvalitní programátory nepracovat v PHP. Takže přirozenou cestou se dostáváte k tomu, že „profesionální PHP programátoři“ jsou Ti nejhorší, a často umí mnohem méně, než Ti, kteří to dělají pro sebe. PHP práce je tak špatně oceněná, že tam najdete ten chvost kvality programátorů.
No a kromě toho PHP nutí nějak tak HTML kodéry a grafiky, že PHP je pro ně přirozenou metou kam pokračovat – a bohužel programátor musí mít prakticky přesně opačné osobnostní vlastnosti, návyky a schopnosti, než grafik a na výsledku programování v PHP je to znát.
P.S.: Pokud bude tento komentář čekat na schválení, je to poslední komentář k tomu blogu vůbec.
Muj nazor na toto tema je jednoduchy.. Jako maly kluk (porad jsem maly, jen o trosku vetsi) jsem zacinal s PHP, velice rychle jsem se naucil pracovat s db, se soubory, v posdstate vse bylo okamzite pouzitelne. Odmaturoval jsem a nastoupil na dalsi skolu. Velice rychle na nas vletli s Javou a okamzite jsem vedel, kudy vede cesta - je to Java, ze zacatku slozitejsi, ve vysledku efektivnejsi, snadno udrzovatelna.. Dnes pracuji jako vyvojar Java webovych aplikaci a i kdyz jsem si jist, ze bych nektere problemy resil daleko rychleji v PHP, nesel bych do toho -> duvody jsou jednoduche, ve firme nemusim byt naveky a Java kod pochopi kazdy i dlouho po mem odchodu. Na Javu se take delaji lepe testy a vubec. Priznam se, jsem zaujaty, Javu jsem si totiz zamiloval..
[61] Vetsi projekty nepisu z hlavy. Ale podle analyzy/designu :-D A samozrejme pisu po castech ;-) Ale spatne jsem to formuloval, spis slo o to, ze pokud vyznamnou cast casu travim v ladici obratce, tak je neco spatne a zpusob deploye to neni. Moznosti vyvojovych prostredi pro Javu proste povazuji v tomto smeru za dostatecne ;-)
[62] "Někdy je prostě efektivnější napsat program co nejrychleji s tím, že pokud bude potřeba větších změn, tak se přepíše už se znalostí všech požadavků."
Jo, to znam. Pak samozrejme zakaznik chce ty zmeny co nejrychleji, takze na prepsani neni cas a vysledkem je sbastlena obluda kde kazda uprava stoji relativne hodne penez a casu, bohuzel vsak vzdy mene, nez to prepsat cely poradne odznova, takze se pokazdy znovu bastli... (I kdyz, samozrejme, mate v principu pravdu, jen jsem chtel upozornit na uskali toho pristupu :-P )
Asociativní pole souvisí s tím, co mi na PHP nejvíce vadí. Nejsou to nekonzistentní názvy funkcí, to je jen malá chybička. Mnohem horší je, že programátory (jako Vy, jen nezkušenější) vůbec nenaučí, že krásně asociativní pole nejsou tak skvělá, jak by se zdála, a vůbec neplatí, že když si k nim budu přistupovat, jak se mi zlíbí, je to stejně super rychlé. Člověk přistupuje k takovému poli a myslí si, že je operace konstatně rychlá, sčítá řetězce, používá všelijaké různé funkce, a pak vůbec nemá tušení, proč ta jeho aplikace je tak děsivě pomalá.
Jinými slovy, s jazykem typu PHP byste měl pracovat až v momentě, kdy máte osvojené znalosti o hashování a zároveň byste měl tušit, jak která operace (replace v řetězcích, apod.) je rychlá. Pokud tohle neumíte, po vystavení jazyku PHP z Vás vyroste možná skvělý montér programů u pásu (a ten si vydělá pěkné peníze, to ano :o), ale programátor rozhodně ne :o)
[60] Já weby tedy skoro nedělám, ale PHP není jen pro weby, nemyslete si, je to jazyk, který se minimálně na unixech dá používat všude.
Nicméně nevidím důvod, proč by Perl měl být na webu anachronismus... Že ho nikdo nepoužívá? To Linux taky skoro ne, to není důvod... Btw: teď anicka(.net) napsala skvělý blogovací systém v Perlu...
Dost dlha diskusia a divim sa ze som prvy co nadhodi ASP.NET - teraz asi schytam par kamenov :))
Ok, roky som programoval v PHP, potom par rokov som sa webu nevenoval vobec a teraz som znovu na web projekde, ktory je v C#/ASP.NET. Takze sa ho "ucim" za behu. Zatial je moja efektivita myslim ze daleko od PHP, ale vyzera to naozaj zaujimavo, celym pristupom. Je to dost ina filozofia webu (vsetko eventy). Nemam to este v krvi takze neviem ci to je lepsie ako tradicia, alebo nie.
Exstuje v dnesnej dobe pre PHP (free? alebo pateny?) IDE, ktory by vedel robit to co visual studio (express) ? Myslim tym hlavne napr. debugovanie aplikacie na serveri (snad by to slo cez nejaky modul do apachu aspon lokalne), nieco ako intelisense, atd. ? Vraj to vie debuogvat aj javascript na stranke, k tomu som sa ale zatial nedostal.
PHP je humus a chválí ho hlavně ten co nepoznal nic lepšího.
Např. C++ a PHP srovnávat nelze, je to jiná třída.
C/C++ není tak pohodlný, ale je rychlejší a jde k jádru věci ...
Dokonce bych označil Javu a PHP za jinou třídu. Protože PHP je pohodlnější, Java rychlejší a koncepčnější.
PHP lze srovnávat s jazyky jako Python a Ruby.
A tady platí, že PHP chválí ten co nepoznal nic lepšího. Nebo snad znáte někoho kdo přešel z Pythonu na PHP, protože PHP je lepší a elegantnější jazyk?
Je jen s podivem kolik poměrně dobrých programátorů v PHP je. Hold asi nejsou tak dobří a zvídaví, aby poznali fakt, že PHP je nic moc a je dobré přijít na něco lepšího.
Pokud vám neustálé psaní $this-> připadá zábavné, jen si hrejte ...
Pokud jsou tak dobří, že na jazyku nezáleží proč to potom nedělat rovnou v c ?
[69] Já jsem přece netvrdil, že se PHP dá použít jen na weby, s těmi jsi to spojil ve svém příspěvku Ty, na což jsem reagoval. PHP je pohodlný jazyk i pro psaní admin skriptíků, sám ho používám tam, kde nepotřebuji vysoký výkon, což v případě maintenance skriptů platí skoro všude (no, někde si vystačím i s bashem, "lepší" jazyky jsou pro tyhle účely přece jen dost často kanón na vrabce ;). Vůbec musím říct, že PHP je nejspíš nejpohodlnější jazyk, který znám - to je nejspíš taky jedna z příčin, proč ho mnozí považují za jazyk pro amátery (zkrátka je hodně blbuvzdorný, takže ho používá kdekdo :)
V každém případě trvám na tom, že psát webové skripty v perlu je už prakticky přežitek, ty doby jsou prostě pryč a vzhledem k nástupu PHP a Pythonu v této oblasti to tak asi i zůstane. Tvé srovnání s Linuxem pokulhává, přece není pravda, že Linux se skoro nepoužívá, to třeba platí o desktopech, ale na internetových serverech je to více než oblíbená platforma, která bez problémů konkuruje ostatním a v blízké budoucnosti se to velmi pravděpodobně k horšímu nezmění. Že by v oblasti webového skriptování byl perl v takové pozici, dost pochybuji. Že se v něm ty skripty dají psát, ještě neznamená, že je to praktické. A zrovna Anička asi taky není typickou představitelkou mainstreamu v IT ;-).
[68] No to je trochu omyl. Ono totiž v každém dynamicky typovaném jazyce – PHP nevyjímaje – je všechno hašovací tabulka (tedy asociativní pole). Co myslíte, že se stane, když napíšete:
$i = 3;
No stane se to, že se v hašovací tabulce globálních proměnných najde proměnná s názvem i a ta se použije. Tedy vnitřně PHP udělá tohle:
$GLOBALS['i'] = 3;
Takže rada nepoužívat asociativní pole v PHP je bláhová. Všechno v PHP – proměnné, objekty, pole, funkce – všechno je vnitřně prohledáváno jako asociativní pole přes hašovací tabulku. Všechny názvy (identifikátory) čehokoli uvnitř PHP je prohledáváno hašovací tabulkou, tedy úplně stejně, jako byste pracoval s asociativním polem.
A tak se to děje v každém dynamicky typovaném jazyce, v PHP, v Pythonu, Ruby, Groovy, Smalltalku, LISPu, Scheme, Perlu, ... – ve všech se používá hašovací tabulka pro prohledávání proměnných, polí, objektů, všeho. Říkají se tomu prostory jmen (namespaces).
A ono je to velice efektivní, protože je mnoho času věnováno tomu, aby hašovací tabulka byla velmi efektivní a je prováděno mnoho testů. Například ve zdrojáku PHP najdete hašovací funkci pro PHP řetězce:
hash = 5381;
for (i=0; i<len; ++i)
hash = 33 * hash + string[i];
Byla hodně testovaná a podrobena mnoha statistickým testům, než došla do tohoto tvaru. Navíc se v každé verzi ladí i uložené a prohledávání hašovacích tabulek.
Takže nepoužívat pole je bláhové, protože tím nic neurychlíte.
Miloslav Ponkrác
[64] Ok vice mene souhlasim. Ale uprimne musim rict, ze sem jeste nenarazil na moc případu, kdy bych pole potřeboval indexovat primo objektem a nestacil my nejaky identifikator - i treba generovany z dat nejakeho objektu. Takže mi tato možnost zatím příliš nechyběla. Ale je fakt, ze v PHP chybi.
PHP ma spoustu nedostatku. Zmineny problem parseru je docela hezky priklad.
Ano kolem PHP je velke mnozstvi spatnych programatoru. Mam s tim nekolik velice negativnich zkusenosti. A myslim, ze to je taky jeden z duvodu proc je vyvoj v PHP ponekud opovrhovan.
ad P.S. Za to zpozdeni schvalovani se omlouvam. Jeste sem neprosel vsechny moznosti nastaveni co blogy na rotu maji takze tam zustalo defaultni schvalovani. A prece jenom tu nejsem porad :-)
[72] PHP v mnoha ohledech za jinými jazyky zaostává. V podstatě jste to docela hezky shrnul. Stejně, ale myslím, že PHP má svoje využití. I když využití Pythonu vypadá taky docela zajímavě. Rozhodně se nesnažím říct, že PHP je lepší než Java nebo Python. Myslím, ale že PHP má pro určitou oblast - kterou je web - řadu výhod.
Konkrétně nevíte někdo jak je například pří scriptování Pythonem řešeno zabezpečení ve sdílených prostředích (např. hostingový server a podobně).
[73] Musím souhlasit. PERL je zajímavý jazyk, ale je poněkud staršího data je to na něm v některých věcech vidět. Rozhodně bych po něm sáhnul, pokud bych potřeboval zpracovávat velké objemy textových dat, ale pro weby se podle mě příliš nehodí. Je pro toto využití poněkud neohrabaný.
[73] Podobně já obráceně jsem došel k názoru, že PHP není příliš pohodlný pro psaní systémových skriptů (došel jsem k tomu jako člověk, který umí od každého trochu, tedy žádný jazyk neměl velkou výhodu předchozích znalostí) ale to záleží asi člověk od člověka... Jestli je něco pohodlného, tak je to psaní v Bashi, ale to zdaleka neumí vše, bohužel...
Jinak Perl na webu určitě není přežitek... Není to dnes protežovaná technologie, protože souhlasím, že psát to v PHP je mnohem víc easy a PHP je vyvíjený a popisovaný/dokumentovaný z velké části právě k tomuto účelu... Nicméně Anvil od Aničky je podle mého ukázkou právě moc pěkného,čistého a nesložitého kódu a nazývat něco nepraktickým, protože to funguje jinak je zbytečné... nepraktické je to pro PHP programátora, má zažitý ten PHP systém...
[70] Proč editor, když takové věci umí framework? zkuste Nette od Davida Grudla, je to moc povedené (a povyšuje to PHP na něco konečně pěkného...)
[72] Já jsem ten, co přešel z Pythonu na PHP. Důvody jsou dva:
1) (podstatný) Python je prostě hříčkou v rukou jeho autora pana Rossuma, a ten ho překopává způsobem, že zrušil zpětnou kompatibilitu tak brutálně jak jsem to ještě u jiného jazyka neviděl, navíc to udělal po 17 letech existence Pythonu. Python 3.0 je nekompatibilní se zdrojovými kódy psané pro Python 2.0 – jediná cesta je zdrojáky projít a ručně opravit, není ani spolehlivý nástroj pro automatickou konverzi. Já potřebuji programovat, ne neustále čekat, kde mi autor Pythonu podkopne židli. A programovat a udržovat kód, když mi Python kdykoli vyhlásí změnu syntaxe zdrojového kódu – děkuji nechci.
2) (nepodstatný) PHP je daleko méně problémové a daleko rozšířenější na hostinzích. Není s ním problém.
Ad 1) bych dodal, PHP také překopává jazyk, ale pokud slušně programujete, změny jsou pro Vás nepatrné. Například přechod PHP3 -> PHP4 pro mě přešel beze změny zdrojáků, přechod PHP4 -> PHP5 pouze s opravou přidáním & před přiřazení objektů v PHP4. Zatímco u Pythonu z přechodu vyjdete nechutně draho.
Byl jsem v komunitě Pythonu velmi aktivní, propagoval jsem ho kde jsem jenom mohl. Moje nadšení skončilo přesně v okamžiku, kdy jsem jako správný nadšenec začal sledovat dění přímo v hlavním stanu a když jsem zjistil, že celá komunita Pythonu včetně jeho autora považuje kompatibilitu zpět za přežitek – došlo mi, že Pythonu nemohu svěřit seriózní dlouhodobé projekty.
Z mého pohledu je PHP lepší, než Python.
[70] Není to a nebude.
V PHP verze 3 byla podpora debugování, v PHP 4 byla škrtnuta. Důvod? Autoři PHP se rozhodli vydělávat na prodeji věcí pro PHP, a bylo pro ně daleko lepší zmrvit PHP. Zkrátka PHP samotné nemá teď ani debugger, ani překlad do byte kódu (ale obojí ve verzi 3 bylo) – a obé se stalo prodejním artiklem pánů autorů.
PHP tedy má jenom debug API, je třeba ještě splašit debugovací modul (některé snad jsou i zdarma), někde splašit IDE na debugování a můžete začít.
V tomhle ohledu PHP je nehůře vybavený jazyk. Ať si vezmete jakýkoli jiný jazyk – Python, Perl, Javu, cokoli – většinou v základním balíku najdete alespoň řádkový debugger a kompilátor do byte kódu. Jen PHP má kulové a důvod jsem popsal.
[80] Nevšimnul jsem si, že by Nette měl plnohodnotný debugger. Nette nepoužívám, ani nehodlám používat, ale seznámil jsem s ním a debugger mi tam chybí :-) Pro jistotu jsem se teď podíval a má jenom zachytávání neodchycených výjimek s chyb. Ale kolega chtěl debugger a ten Nette nemá.
[80] On ten Perl se zabíjí sám. Autor Perlu už léta slibuje, že bude Perl6, nekompatibilní s Perlem 5. A nikdo nechce moc co vyvíjet, když by to musel s Perlem6 přepsat, zase někdo chce vyvíjet, až bude mít ty úžasné věci v 6. Takže všichni čekají a celý Perl stagnuje. Navíc nikdo už moc nevyvíjí nástroje pro současný Perl, protože stejně příští bude jiný. Myslím, že autor Perlu efektivně Perl zruší jako vedlejší efekt.
No a pak se potkal autor Perlu a autorem Pythonu a od té doby dostal autor Pythonu ten blbý nápad, že udělá s Pythonem totéž, tedy znekompatibilní ho a také nad tím dlouho přemýšlel, a posílal do komunity návrhy, že jednou ho překope tak a příští týden, že tedy tak ne a bude to jinak.
Takže to je sranda.
Vsichni omilate porad to same dokola..ze php je na nic a jen na male projekty..dobra aplikace je dobra aplikace a je jedno v cem je napsana..porad na vetsi projekty pouzivam javu nebo python..tak se taky pochlubte tema velkyma projektama:)chtel bych videt kolik z vas vube nejakou uzitecnou aplikaci napsalo:)..neni dobry a spatny jazyk..je dobry a spatny programator..troufam si rict ze v php je napsano pres 50% webu..a proc asi? protoze php je na nic?:)
[82] To je nestastne ale relativne pochopitelne.
Jinak Java ma jeste jedno kouzlo - mam soft co generuje (pomerne komplikovane) grafy. A ten samy kod je mozno pouzit jen s lehkym "obalenim" prislusnym formularem pro generovani grafu na zaklade zadani z Webu, z Java appletu nebo z desktopove aplikace. Prima :-)
[80] Přece je zjevné, že perl i PHP jsou obecně použitelné jazyky, takže v obou se dá napsat systémový skript nebo webová aplikace. O tom, co se pro který účel jeví jako praktičtější, myslím svědčí to, jak se ty jazyky pro tyto účely používají. Jak to vypadá, perl se jako jazyk pro weby moc neprosadil, ač k tomu měl nakročeno, což myslím podporuje můj názor, že pro to není nejvhodnější. Tím samozřejmě nechci říct, že je nějak špatný. Spousta jazyků se pro psaní webů příliš nehodí, ač o jejich kvalitách obecně nikdo nepochybuje...
[81]
Pokud vím, pak bude Python2.x ještě dlouho podporovaný, tak bych to neviděl za tak zásadní problém... Prostě občas je třeba říznout do koláče aby se mohlo vyvíjet efektivněji dál (IMHO teda)
Co se Nette a debuggeru týče, to se omlouvám, debuggery nepoužívám, tak nějak neznám rozdíl...
[87]
Pořád se točíme v tomtéž, tak už to asi utnu. Tvrzení, že "něco se nepoužívá"->"není to praktické" není dle mého názoru platné... Uznávám, že PHP je na web obvyklé a jemu přizpůsobené, nikoliv však ideální (že je Perl ideální netvrdím, je elegantní)
[89] Python 2.x bude možná dlouho podporovaný, nikoli však výrobci knihoven. Ono je třeba říci, že samotný programovací jazyk není až tak užitečný, důležité jsou jeho knihovny. Svět se nezastaví, a velmi pochybuji, že všichni výrobci knihoven budou ještě dlouho důsledně dělat knihovny jak pro 3.x, tak pro 2.x. Nedělejte si iluze, nebudou. Řada lidí bude prostě kvůli knihovnám donucena přejít.
Říznout do koláče se mělo, když Python začínal. Představte si, že by se takto řízlo třeba do Céčka, nebo do linuxového bashe. Najednou by všechny C programy neběžely, a všechny bashové skripty rovněz ne. Linux by se stal velmi chybovým (protože každý přepis zdrojáků, i ten nejprimitivnější do něj naseká spousty chyb) a následujících několik let by linuxové jádro padalo jako hrušky. To je totiž důsledek zbytečného přepisu. A všichni by samozřejmě přepsaly své administrátorské skripty. Také byste to obhajoval?
Ne nadarmo jsou všechny seriózní jazyky, v nichž se píší velké projekty a důležité projekty takové, které ctí zpětnou kompatibilitu, a nikdy tento řez do kolářče neudělají. Protože tento řez nic užitečného nepřinese, a nepřinese ani v Pythonu. Takže jazyky jako C, Fortran, Cobol, C++, Java, Ada, ... – to jsou seriózní jazyky, pro které kompatibilita dozadu něco znamená, a proto vévodí, často už po mnoho desítek let programátorskému světu a v nich se píší věci, na kterých záleží.
[89] Nette není nic jiného, než sbírka knihoven. Nemá ani debugger, ani profiler (přestože autor profilerem vzletně nazývá pouhou blbůstku na měření časového intervalu) a vůbec se snaží vzbudit zdání, že Nette je cosi bombastického.
Je to jednoduché, v PHP se pohybují málo kvalitní lidé – a tam jde si hrát na haura i na odborníka snadno, protože mezi slepými jednooký králem. Nette nic až tak světoborného není.
Chcete-li ze sebe udělat odborníka, chcete-li si vybudovat jméno s minimálními znalostmi, a nemáte na to stát se skutečným odborníkem? Zkuste to ve světě PHP, tam je mimořádně nízká laťka – a to je tak asi co bych naznačil na adresu Nette.
[85] Programmer is only as good as his tools. PHP (also known as Pretty Horrible Programming) pravdepodobne nema Vami propagovanou miru procentualniho zastoupeni a to zejmena z duvodu nemoznosti toto s primerenou nepresnosti zmerit. Dale, pokud by ji nekdo zmeril, je nezbytne uvest den ke kteremu se hodnota vztahuje, jelikoz je hodnota variabilni. Nezapomente uvest metodologii a prilozit alespon nekolik formalnich dukazu, ze uzita metodologie je spravna.
Nyni bude implicitne predpokladano, ze C/C++/JAVA nemaji zadnou ze skupiny zde jmenovanych nevyhod PHP. Proc neprejit, pokud ne z toho duvodu, ze ten kdo nyni pise scripty v PHP neni ve skutecnosti programator, ale jen si na nej hraje a na nic jineho nema? Jak si vlastne muze "programator" rikat nekdo, kdo ani poradne nevi co je to kompilace, dekompilace, assembler, parsing, lexer, lexem, token, konecny stavovy automat, nemluve o tom, ze PHP programator casto ani nevi co je to bit, pointer ci boolean?
[91]precti si prosim muj prispevek[51]..netvrdim ze neprechazet..zalezi co chci psat a podle toho pouziju jazyk..sam pouzivam..c,c++ ,obcas python na desktop aplikace a na webu php ,js atd..jen dohady o tom ten je lepsi ten horsi..php je hnus atd..jsou o nicem..kazdy jazyk je dobry na neco..a nekomu vyhovuje to a jinemu tohle..a priste prosim alespon podpis kdyz reagujes na muj prispevek
[91] reagoval jsem na casti z [85] "neni dobry a spatny jazyk..je dobry a spatny programator..", "troufam si rict ze v php je napsano pres 50% webu.." a dale ponekud obecneji na vice predchazejicich komentaru. Priznavam, ze jsem se nechal trochu unest, nicmene i presto na obsahu [91] trvam.
[93] Ztraceny pripad? To si mne jiste pletete se sebou. Ja programuji neustale a to jednak v jazycich, ktere jsem jmenoval a jednak v dalsich na HPP. Venuji se programovani poctive jiz radu let a jsem v tom dobry. Kdyz silne pochybovat, tak predevsim o rychlych soudech, pamatujte si to. :)
[91] Programmer is only as good as his tools
Tak to je blbost. Naopak bych řekl, že dobrý programátor dokáže dobře programovat třeba v Brainfucku. Stejně jako dobrý řezbář vyřeže pěknou sošku i jen s pomocí kapesního nožíku do kusu dřeva, který se válel v lese u cesty a dobrej skladatel zhudební do symfonie třeba psaní na stroji. Holt kdo umí, ten umí a nástroj je pro něj _jen_ prostředkem, ne pánem.
"Jak si vlastne muze "programator" rikat nekdo, kdo ani poradne nevi co je to kompilace, dekompilace, assembler, parsing, lexer, lexem, token, konecny stavovy automat,"
Pozor, ať si nenaběhneš. To, že víš jak funguje kompilátor (a zrovna tohle téma bych fakt nerozebíral, vzhledem k jeho náročnosti) z tebe ještě dobrýho programátora nedělá. Ona je taky otázka, jestli to opravdu víš, nebo si jen myslíš, že to víš. Já jsem jako výzkumnou práci (ve 4.ťáku na vejšce) psal interpret Pascalu a, jak se říká, šedá je teorie, jen strom života věčně zelená se. Někdo jiný by tě třeba zas mohl chytat za slovo, že neumíš grafiku, signály, numeriku, systémařinu, databáze apod. (myslím teda z pohledu algoritmizace)
Jo a jen tak mimochodem - za mě se ještě programovat začínalo v osmibiťáckým BASICu (kdo nepamatuje - pouze globální proměnné, max. dvouznakové identifikátory, jediné typy byly real, string, pole realů a pole stringů, max. jednořádkové funkce, žádné procedury, jediná možnost strukturování pomocí GOSUB-RETURN, a FOR-TO-NEXT a to vše neuvěřitelně pomalu interpretované...). Dokud jsi to nezvládnul, tak tě k ničemu lepšímu (běžícímu na lepších počítačích) ani nepustili. A že ty úkoly, co jsme v tom BASICu museli dělat, byly na úrovni řešení různých šachových figur či dif. rovnic. Jak se zdá, tak někteří dnešní "programátoři" by v době mých začátků skončili tak rychle, jak by začali. Ale nemyslím, že by to bylo špatně.
Pokud by nastroj pro programatora byl jen prostredkem, ne panem, osuntela tuzka a skrceny papir cerstve vytazeny z odpadkoveho kose by stacily pro napsani dobreho portalu v PHP. Obycejnym nozem a sprachnivelym kusem neohebneho dreva z lesa rezbari mnoho presnosti neziskaji a tak dobrou sosku, jako se svym profesionalnim vybavenim nemaji sanci bez nej vytvorit. I nejlepsi orchestr sveta je bez kvalitnich nastroju pro usi neliby.
Poukazuji predevsim na programatory, pro ktere jsou slova kompilace, parsing ci podobna naprosto cizi, nebo si pod nimi vybavuji neco jineho (napr. "Kompilace? To je takovy to F5, takze spousteni, ne?").
PS: take jsem zacinal v BASICu, diky bohu to byl 16-bit :)
[94]hm tak kdyz ses tak dobrej jak rikas tak se alespon podepiste..nebo ukaz nejakej svuj projekt.a nebo se snad bojite:)..ze jste zacinal v basicu.ja zacal na didaktiku gama s programovanim obrazku a co jako..a dle mne fakt nezalezezi na nastroji..kdyz je clovek sikovnej da si praci ma dobre napady tak i s nekvalitnim nastrojem dokaze stvorit dobre veci!!
[96] Taky že jo. Ale kolik lidí v IT je dnes opravdu dobrých? 5% když to nadhodnotím. To umění je právě v tom, že i z toho kusu zdánlivě nepoužitelného dřeva ten, kdo umí, je schopen něco hodnotného stvořit, zatímco ti ostatní vůbec nejsou schopni si představit, že by to bylo možné. S trochou nadsázky se dá říct, že čím vymakanější nástroj, tím méně schopný může být ten, kdo ho používá. Ale proto ty nástroje vznikají - aby umožnily téměř každému, kdo jde okolo, něco stvořit.
P.S.: A není kompilace "takový to F5"? 90% lidí to ke spokojenosti stačí. Horší je, když nevědí, jak funguje seznam, strom, hashová tabulka, zásobník apod. Bez znalosti principů syntaktické analýzy se většina programátorů obejde, bez znalosti základních datových struktur a algoritmů - to snad ani nejsou programátoři. A takových je dnes většina.
[91] Tak až se mě příště nějaká kočena zeptá, co dělám, tak ji řeknu, že mlátím do klávesnice. A když se zeptá, zda jsem programátor, tak tím, že ji řeknu, že ne, tak ji vlastně nezalžu :)
Mě jsou tyhle pojmy u vítekde, hlavní je, že můžu koukat v pracovní době na porno a o to jde :)
Hehe, jaképak never-ending-thema.
Samozřejmě PHP je jazyk jen pro ty nejlepší programátory z nejlepších. S kompilátorem Javy nebo C#, s jeho IntelliSense, dokáže programovat i cvičená opice, ale napsat kvalitní kód v PHP a vyhnout se elegantně všem chybám setinkových verzí vyžaduje nadstandardní um.
PHP dělá z programátorů opravdové borce. Ti, co na to nemají, bastlí v něčem jiném.
Howgh.
[102] Zkušenosti s vývojem větších projektů v PHP zkušenosti mám. Samozřejmě záleží co je myšleno pod pojmem "velký projekt". Pro někoho je velký projekt něco co má přes 5 000 řádek, pro někoho velké projekty jsou přes 100 000 řádek (než mě zase začnete někdo kamenovat vím, že počet řádků není zrovna ideální metrika).
Aktuálně nejzajímavější nasazení našeho systému Ariadne3.0 jsou intranet Pardubické krajské nemocnice a stránky sdružení medicinských laboratoří MeDiLa. Projekt má aktuálně něco přes 70 000 řádek.
Nechci a ani nemůžu tvrdit, že patřím mezi špičkové odborníky. Uvědomuji si, že k tomu mám ještě daleko. Tenhle článek je čistě můj názor založený na mých zkušenostech a nikdy jsem ho nemínil jako absolutní pravdu.
Od toho ostatně blogy jsou ne? Prezentovat svůj názor na nějaký problém. A případně se v komentářích k němu dozvědět něco nového.
[105] Velky projekt nie v zmysle velkosti aplikacie ale co do objemu prenesenych dat a posielanych stranok, poctu uzivatelov a navstevnikovc. Velky projekt je v tomto zmysle nieco co ma priemernu navstenost meranu v poctoch navstevnikov za sekundu. Na pocte riadkov nezalezi.
Inak sa ospravedlnujem za trosku prudsiu reakciu. Nevedel som ze reagujem na spot na blogu (root.cz citam len zriedka, ani som nevedel ze su tu nejake blogy). Konkretne trebars cast kde pises o vykone. Tam tie riesenia nie su az take zlozite ako by sa zdalo. Ak mas trebars bytecode caching moze mat zaroven aj mem caching. Aj v PHP samotnom su nejake moduly na shared memory, takze to nie je az take zufale ako by sa mohlo zdat. Samozrejme na malych hostingoch s tym bude vzdy problem ale ak ide o velke projekty tak na malych hostingoch ti spravne zvoleny "profesionalny programovaci jazyk" aj tak nepomoze ;-)
[108] Aha takze velký projekt z pohledu nasazení ne vývoje. Ok v tom případě má náš největší projekt v PHP cca 2000 uživatelů. Ostatní metriky (počty přístupů) bohužel nevím.
Mem caching sme zvažovali, ale bohužel v nástroji, který jsme zkoušeli jsme narazili na problémy s thread-safe přístupem. Pokud mi ale můžete doporučit nějakou knihovnu, která tohle zvládá tak ji určitě rád vyzkouším.
http://en.wikipedia.org/wiki/PHP_accelerator (tu tvrdia ze Xcache by to malo zvladat, skusenosti s nim nemam.)
[101] To co píšete je hlopost, pokud chcete začít programovat v PHP, tak základy zvládnete za chvíli, můžete sednout a začít psát kód. Ovšem dejme tomu u .NETu tomu tak není, můžete strávit týdny než se naučíte základní potřebné věci a funkce z frameworku (měsíce než pořádně). Když je však umíte podstatně to ulehčuje programování a samotný vývoj a řekl bych, že délka vývoje je jedno z nejdůležitějších kritérií během tvorby nějakého projektu. Nemyslím si, že IntelliSence má nějaký vliv na funkčnost kódu.
Jinak je pravda, že dobrý programátor zvládne napsat dobrou aplikaci v čemokoli, ale za jakou dobu? Proč všichni nepoužívají třeba Assembler? Nezapomínejte na to, že vždycky je dražší práce vývojáře než ty mašiny na nichž to běží, proto pro komerční účely je podřeba vybírat takové nástroje, kde dostanete za málo peněz hodně muziky. Půjde-li o soukrmý web, tak už je jen na vás zvolit si priority, zda to bude čas, rychlost, stabilita či co?
Chcete-li hodnotit v čem jsou napsány velké internetové projekty, tak musíte vzít v úvahu, kdy taky vznikly a jaké nástroje tehdy byly k dispozici.
Life is like an onion: sacoche louis vuitton homme you peel it off one layer at a time, and sometimes you weep.
There are lots of shining siliery thread on my back, sac hermes oas cher controlling all my action.
I suddenly feel myself like a doll, louis vuitton pa acting all kinds of joys and sorrows.
Zdravím všechny a zárověn bych vás chtěl požádal o radu...Chci si v dohledné době nechat vytvořit web o specializované firmy...Jsem téměř rozhodnutý ,že by měl být napsaný v PHP... Jeho výhody a nevýhody jsem si již prostudoval v ruzných diskuzích a článcích, ale nikde jsem se nedočetl a TO JE MÁ OTÁZKA - zda lze v případě mé nespokojenosti s PHP po čase ,či letech web nechat dát přepsat jiné firmě do jiného jazyha...např java,C++,apod ??? Pokud je toto možné ,tak zda lze změnu udělat při chodu webu,tak aby již registrovaní uživatelé se nemuseli registrovat znovu a web nemusel začínat od znovu.... Velice vám předem děkuji za pomoc v podobě odpovědi. Jirka
Autor je student Fakulty informačních technologií VUT v Brně. Současně pracuje ve firmě LifeWeb (http://www.lifeweb.cz) jako hlavní vývojář.