NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:12.6.2013 11:02

Tak si tu sedím nad snídaní, dívám se do svých starých kódů, a přitom mě napadá otázka: "Co by jste na PHP zlepšili?". Určitě je toho spoustu - strašně pojmenované a definované funkce, nedodělané OOP...

Takové diskutabilní téma. :)

Odpovědět
12.6.2013 11:02
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 11:06

Zkus se podívat na specifikaci PHP6 a porovnávej.

Nahoru Odpovědět
12.6.2013 11:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:12.6.2013 11:11

Mno, PHP6 nijak velký skok nepřinese, jen snad ta podpora Unicode a řetězce alá Python ($neco->lenght())

Nahoru Odpovědět
12.6.2013 11:11
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:12.6.2013 11:14

Navíc PHP je strašně tolerantní, a nachylný k chybám. Ten problém PHP6 ještě zvětšil.

Nahoru Odpovědět
12.6.2013 11:14
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 11:17

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í.

Nahoru Odpovědět
12.6.2013 11:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 11:23

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.

Nahoru Odpovědět
12.6.2013 11:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:12.6.2013 11:27

PHP 6 vypadá skvěle a pokud udělali řetězce konečně jako objekty, tím lépe.

Nahoru Odpovědět
12.6.2013 11:27
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.6.2013 11:33

Řetězce v PHP už jsou objekty. Jen ty metody jim stále chybí :)

Nahoru Odpovědět
12.6.2013 11:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:12.6.2013 11:52

Tak nějak. Když se koukám na některé kódy, bolí mě oči. :D 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...

Nahoru Odpovědět
12.6.2013 11:52
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 11:55

OOP je v PHP dobře implementováno, nic mi v něm nechybí.

Nahoru Odpovědět
12.6.2013 11:55
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:12.6.2013 11:59

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.

Nahoru Odpovědět
12.6.2013 11:59
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 12:06

Ne, má ho úplně stejné.

Nahoru Odpovědět
12.6.2013 12:06
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 12:07

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í.

Nahoru Odpovědět
12.6.2013 12:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 12:08

V čem je horší OOP v PHP proti ostatním jazykům?

Nahoru Odpovědět
12.6.2013 12:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:12.6.2013 12:11

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

Nahoru Odpovědět
12.6.2013 12:11
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:12.6.2013 12:16

Co je tam uložené poznáš ze správně zvoleného názvu proměnné :)

Nahoru Odpovědět
12.6.2013 12:16
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:12.6.2013 12:18

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ě :)

Nahoru Odpovědět
12.6.2013 12:18
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:12.6.2013 12:20

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ší.

Nahoru Odpovědět
12.6.2013 12:20
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:12.6.2013 12:25

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.

Nahoru Odpovědět
12.6.2013 12:25
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Kit
Neaktivní uživatel:12.6.2013 12:28

Například směle vynechali mnohonásobnou dědičnost. :)

Nahoru Odpovědět
12.6.2013 12:28
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Nymsa:12.6.2013 12:31

Například C# ji také nemá a nevadí to. Kvůli tomu existují Interface a pokud vím, PHP už je má taky.

Nahoru Odpovědět
12.6.2013 12:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Neaktivní uživatel:12.6.2013 12:31

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. :)

Nahoru Odpovědět
12.6.2013 12:31
Neaktivní uživatelský účet
Avatar
Odpovídá na Petr Nymsa
Neaktivní uživatel:12.6.2013 12:33

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:
Nahoru Odpovědět
12.6.2013 12:33
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 12:35

Většina programovacích jazyků nepodporuje vícenásobnou dědičnost, jelikož nadělá více problémů než užitku.

Nahoru Odpovědět
12.6.2013 12:35
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:12.6.2013 12:36

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. :)

Nahoru Odpovědět
12.6.2013 12:36
Neaktivní uživatelský účet
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Lukáš Hruda:12.6.2013 12:36

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é.

 
Nahoru Odpovědět
12.6.2013 12:36
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 12:38

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.

Nahoru Odpovědět
12.6.2013 12:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:12.6.2013 12:39

Nebo si vemte chybnou implementaci self::. V PHP obyčejný Singlenton nenapíšeš.

Nahoru Odpovědět
12.6.2013 12:39
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 12:39

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.

Nahoru Odpovědět
12.6.2013 12:39
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 12:41

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ě.

Nahoru Odpovědět
12.6.2013 12:41
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 12:41

Singleton je antipattern, neměl by se používat.

Nahoru Odpovědět
12.6.2013 12:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:12.6.2013 12:43

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.

 
Nahoru Odpovědět
12.6.2013 12:43
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Petr Nymsa:12.6.2013 12:44

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)

Nahoru Odpovědět
12.6.2013 12:44
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:12.6.2013 12:44

No právě, ono těch důvodů moc není :) Vždy jde udělat abstraktní předek a podědit to 2x.

Nahoru Odpovědět
12.6.2013 12:44
New kid back on the block with a R.I.P
Avatar
Odpovídá na Kit
Neaktivní uživatel:12.6.2013 12:47

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?

Nahoru Odpovědět
12.6.2013 12:47
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 12:48

Když si uděláš běžnou statickou třídu, dosáhneš stejného efektu.

Nahoru Odpovědět
12.6.2013 12:48
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:12.6.2013 12:50

Vždycky se ti ale někde může náhodou vytvořit její instance, což už by bylo špatně.

Nahoru Odpovědět
12.6.2013 12:50
Neaktivní uživatelský účet
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:12.6.2013 12:50

"Vždy jde udělat abstraktní předek a podědit to 2x"
Moc nechápu jak přesně tohle myslíš.

 
Nahoru Odpovědět
12.6.2013 12:50
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 12:56

Singleton je k ničemu. Proč bych ho měl používat?

Nahoru Odpovědět
12.6.2013 12:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Petr Nymsa:12.6.2013 12:56

abstract class Zvíře

public abstract NajezSe()
....

abstract class Savec : Zvire
public abstract SajMleko()
....

class Clovek : Savec
Nahoru Odpovědět
12.6.2013 12:56
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 13:00

Náhodou se žádná instance nevytvoří. Asi si to s něčím pleteš.

Nahoru Odpovědět
12.6.2013 13:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 13:00

Když si vytvoříš instanci třídy, která má vše statické, tak s tou instancí nepůjde nic dělat :)

Nahoru Odpovědět
12.6.2013 13:00
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:12.6.2013 13:01

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í.

Nahoru Odpovědět
12.6.2013 13:01
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 13:02

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í.

Nahoru Odpovědět
12.6.2013 13:02
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:12.6.2013 13:04

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.

Nahoru Odpovědět
12.6.2013 13:04
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:12.6.2013 13:06

Já moc doufám, že se to stane :D Kde jsi našel tu informaci, že na stringách budou metody? Nedaří se mi to dohledat.

Nahoru Odpovědět
12.6.2013 13:06
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Lukáš Hruda:12.6.2013 13:06

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í.

 
Nahoru Odpovědět
12.6.2013 13:06
Avatar
Neaktivní uživatel:12.6.2013 13:09

Mám dojem, že to bylo tady. :) http://philsturgeon.co.uk/…-in-the-wind

Nahoru Odpovědět
12.6.2013 13:09
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:12.6.2013 13:10

(Ještě dodám, že je to jen spekulace. :))

Nahoru Odpovědět
12.6.2013 13:10
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.6.2013 13:12

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.

Nahoru Odpovědět
12.6.2013 13:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 63.