Diskuze: Co by jste na PHP zlepšili?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 50 zpráv z 63.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zkus se podívat na specifikaci PHP6 a porovnávej.
Mno, PHP6 nijak velký skok nepřinese, jen snad ta podpora Unicode a řetězce alá Python ($neco->lenght())
Navíc PHP je strašně tolerantní, a nachylný k chybám. Ten problém PHP6 ještě zvětšil.
Na PHP bych asi nejraději zlepšil programátory, kteří ho používají. Některé aplikace vypadají fakt strašně. Asi by nebylo od věci z PHP vyházet cca 80-90 % funkcí.
Náchylnost k chybám se dá snadno eliminovat metodou TDD, která je podle mne pro PHP důležitější než pro ostatní jazyky.
PHP 6 vypadá skvěle a pokud udělali řetězce konečně jako objekty, tím lépe.
Řetězce v PHP už jsou objekty. Jen ty metody jim stále chybí
Tak nějak. Když se koukám na některé kódy, bolí mě oči. O tom vyházení funkcí - to by
taky nebyl špatný nápad, něco by se dalo zautomatizavat...
Já náchylnost k chybám eliminuju frameworky, a když už čistý PHP, tak už
si holt musím dávat pozor. Ale PHP někdy povolí takový paskvil, který by
jiný jazyk ani nedovolil přeložit.
Určitě, přiřazený metod k řetězcům je skvělí, snad více lidí přejde k OOP. Ale nejspíš to udělá ještě větší bordel u OOP...
OOP je v PHP dobře implementováno, nic mi v něm nechybí.
Když vyšlo PHP4, myslel jsem, že k OOP při PHP nikdy nepůjdu. PHP5 to trochu zpravilo, ale oproti jiným jazykům má PHP mnohem horší OOP.
Java šla cestou, že každou funkci uložila do nějaké třídy jako metodu. Ukázalo se, že je to správná cesta. Funkcí pro práci s řetězci je v PHP tolik, že v nich je už docela velký zmatek.
Frameworky také bývají plné chyb. Podle mne mohou být zajímavé pouze moduly PEAR a PECL. S ostatními frameworky mám převážně špatné zkušenosti, často jsem je z poloviny musel přepsat, aby dělaly co mají.
Osobně by mě pomohlo kdyby funkce a vše okolo bylo mnohem přehlednější. Některé názvy funkcí ani skoro nic neřeknou co dělají. Dále (to už je o zvyku) mi nesedí (nebo nejsem spíš zvyklý) dynamické typování. Prostě když kouknu na kód Javy / C# apod vidím co je co. Když kouknou na kód PHP nevím jestli je tam uložené číslo, string, objekt ... ale asi to je o zvyku
Co je tam uložené poznáš ze správně zvoleného názvu proměnné
To je fakt Ale ty funkce
jsou matoucí ... ne všechny ale občas prostě nevím jak je vlastně hledat.
Jsem zvyklý prostě ze C# že když hledám funkce pro práci ze stringy najdu
ji pod objektem string (například Replace, Trim, Split, Join ,...). Ale funkce
strpos už není tak pěkný. Sice vím že to bude zřejmě zkratka pro string
position ale stejně
Ano, ty funkce jsou naprosto hloupě pojmenované i navržené, bohužel jsou tam potřeba z důvodu kompatibility. Hodně věcí se již zlepšilo, třeba pro práci s datem a časem je tam teď třída a funkce používat nemusíš. Jestli v šestce přidají metody na stringy a třeba i pole, zas se to zlepší.
Věřím v to PHP se mi
líbí, sice ještě jsem v něm nevytvořil nic moc pěknýho ale op
rázdninách chci vytvořit nějaký vlastní "redakční systém" pro svůj
web. Prostě správu článků apod.
Jinak myslím že z OOP tam nic nechybí.
Pro všechny. Jaké máte zkušenosti se Zend Frameworkem. Mám knihu PHP 5 a MySQL a popisují tam PEAR, Zend framewrok a ještě jeden , teď si nevzpomenu na jméno.
Například směle vynechali mnohonásobnou dědičnost.
Například C# ji také nemá a nevadí to. Kvůli tomu existují Interface a pokud vím, PHP už je má taky.
Funkce v PHP jsou někdy naprosto hrozně pojmenované, někdy skvěle,
někdy přejímají z jiných jazyků... Mě osobně se PHP líbí, a doufám,
že jednou se dostane na stejnou úroveň jako třeba Java.
Ale stále PHP byl původně šablonovací systém, takže už teď to
dotáhl daleko.
Interface je něco trochu jiného než extends. Mě osobně by to ulehčilo práci, kdyby to bylo jako v Pythonu:
class Trida extends Trida2, Trida3:
Většina programovacích jazyků nepodporuje vícenásobnou dědičnost, jelikož nadělá více problémů než užitku.
Všechny vnitřní PHP fuknce jsou procedurální, a proto "dobrý OOP" PHP
nedovoluje. Kombinovat je s OOP je hnus, ale bohužel v PHP to jinak nejde.
Vícenásobná dědičnost a interface jsou 2 různé věci. Někdy se pomocí interface dá vícenásobná dědičnost obejít, ale určitě ho nenahrazuje. Osobně jsem vícenásobnou dědičnost použil jen jednou, ale bylo to zrovna v případě, kde by mi interface nebylo moc platné.
Vícenásobná dědičnost je problém. Osobně si myslím, že ani v Pythonu by neměla být. Pokud potřebuješ vícenásobnou dědičnost, máš zřejmě chybu v návrhu.
Nebo si vemte chybnou implementaci self::. V PHP obyčejný Singlenton nenapíšeš.
OOP není o tom, jak se pracuje s řetězci nebo poli. Je o návrhu aplikace a rozdělení aplikace do spolupracujících objektů. To PHP umí velmi dobře, např. na stejné úrovni jako Java.
Máš nějaké mylné informace. Zaprvé je Singleton antipattern a neměl bys ho používat (stejně jako vícenásobnou dědičnost), zadruhé jde v PHP udělat úplně normálně.
Nemyslím si, že by na vícenásobné dědičnosti bylo něco špatného, pokud člověk ví co dělá a použije to pouze tam, kde k tomu má dobrý důvod.
Netvrdím že Interface slouží k vytvoření vícenásobné dědičnosti. Nijak ji nepoužívám. Ale dá se to tak použít.
Interface zatím osobně také moc nepoužívám. Ve hře zatím pro označení, vytvoření objektů které podporujů světla (jdou ovlivnit světlem)
No právě, ono těch důvodů moc není Vždy jde udělat abstraktní
předek a podědit to 2x.
Jistě, že by se neměl používat, ale přesto je to jeden z nejznámějších (a podle mě i celkem užitečných) návrhových vzorů. Osobně používám MVC, ale když potřebuju, proč si nevytvořit singlenton registr?
Když si uděláš běžnou statickou třídu, dosáhneš stejného efektu.
Vždycky se ti ale někde může náhodou vytvořit její instance, což už by bylo špatně.
"Vždy jde udělat abstraktní předek a podědit to 2x"
Moc nechápu jak přesně tohle myslíš.
Singleton je k ničemu. Proč bych ho měl používat?
abstract class Zvíře
public abstract NajezSe()
....
abstract class Savec : Zvire
public abstract SajMleko()
....
class Clovek : Savec
Náhodou se žádná instance nevytvoří. Asi si to s něčím pleteš.
Když si vytvoříš instanci třídy, která má vše statické, tak s tou
instancí nepůjde nic dělat
Nepletu. Na projektech někdy pracuje více programátorů najednou. Máš třeba statickou třídu Registry, používáš jí jen jednou, ale pak ti někdo přijde (a jelikož PHP pustí všechno) a načte ti další instanci, což Singleton nedovolí.
K tvému původnímu dotazu si myslím, že PHP je objektovým návrhem velmi vyspělé a jediným problémem je zátěž v těch starých funkcích, které však nepředstavují takový problém a zároveň se objevují třídy, které je nahrazují.
Dobrá, nechme toho.
sdraco: Souhlasím. Řekl bych, že kdyby PHP vyházelo procedurální funkce, a nahradilo je třídama (a nejlépe i aktualizovali jména metod), tak by to byl už jazyk na úrovni.
Já moc doufám, že se to stane Kde jsi našel tu informaci, že na stringách budou metody? Nedaří
se mi to dohledat.
Možná jsem to nesprávně pochopil, ale nepřijde mi, že by toto nějak řešilo problém s vícenásobnou dědičností.
Mám dojem, že to bylo tady. http://philsturgeon.co.uk/…-in-the-wind
(Ještě dodám, že je to jen spekulace.
Jen tak porovnání Singletonu se statickou proměnnou
http://moisadoru.wordpress.com/…call-in-php/
Ale Singleton i statická proměnná se ve své podstatě chovají jako globální proměnná, takže používání obojího je zavrhováno.
Nenapadá mě, k čemu bych Singleton nebo statickou proměnnou použil. Statické třídy používám vlastně jen v testech, abych ten test oddělil od testované třídy.
Zobrazeno 50 zpráv z 63.