Autor Zpráva
whysper93
Profil
Ahoj mám jenom takovou malou otázku. Jaký je rozdíl, když použiji:
class cTrida{
  public $text = "";
  function __construct($text)
    {
    $this->text = $text;
    }
}

A když použiji pro konstruktor funkci se stejným jménem jako je jméno třídy?
class cTrida{
  public $text = "";
  function cTrida($text)
    {
    $this->text = $text;
    }
}

Ptám se jen tak ze zajímavosti začínám s OOP v PHP a narazil jsem na to. Tak díky za odpovědi.
__construct
Profil
Metóda (nie funkcia) s rovnakým názvom ako trieda je konštruktor v PHP 4 , __construct je konštruktor v PHP 5 .. Kvôli spätnej kompatibilite s aplikáciami pre PHP 4 sa to dá použiť aj vo verzii 5 ale pokiaľ máš triedu ktorá obsahuje obe tieto metódy tak ako konštruktor sa považuje iba ten s syntaxou v. 5 (pokiaľ máš PHP5 - predpokladám, že áno)
Každopádne vo funkčnosti v tom rozdiel nie je (stále hovorím o PHP 5) - niektorí čo programujú napr.v Java tak zo zvyku používajú ako konštruktor názov triedy
whysper93
Profil
Díky za rychlou odpověď. Omlouvám se za ty funkce je to síla zvyku nazývat to tak :D Časem si možná zvyknu na metody. Z tvého příspěvku vyplívá ještě jedna otázka:
Můžu tedy pro zajištění funkčnosti i v nižších verzích PHP použít oba zápisy? Jakože úplně stejné dvé metody ale jednu se stejným názvem jako je název třídy a druhou s názvem __construct? Nebo je tedy lepší používat jen metodu se stejným názvem jako je název třídy aby to fungovalo i v nižších verzích?
__construct
Profil
V tom prípade je lepšie používať ako konštruktor názov triedy (robia to tak aj niektoré frameworky) .. Nevidím dôvod mať triedu s dvoma totožnými metódami s iným názvom ..
Nox
Profil
whysper93:
Podle mě ne

1) A to hlavně -> podpora OOP je v PHP4 velmi slabá. Pokud bys udělal jen tento ústupek, je to k ničemu. Takže bys musel psát podle PHP4 a to je na nic
obzvlášť v kombinaci s:
2) PHP4 z hostingů podle mě už téměř úplně vymizelo
Majkl578
Profil
Pouze __construct, konstruktor podle názvu třídy nepoužívat.

PHP 4 je od 7. srpna 2008 nepodporované, a proto nemá cenu brát na něj jakékoliv ohledy. Pokud hosting nabízí pouze PHP 4, doporučuji co nejrychleji najít nový.
whysper93
Profil
Dobře díky všem za odpovědi.
joe
Profil
Funkce nebo metoda, je to jedno, hlavně když každý ví o co se jedná. V PHP bych to nazýval funkcí, je to uvozené slovem "function".
Majkl578
Profil
joe:
Ale správně je to metoda, překlad „method“.
joe
Profil
(OT)
Majkl578:
Můžu se zeptat proč? Protože PHP je OOP? Zase není čistě OOP, jako třeba Java. Jinak pěkné, že jsi přeložil slovo "metoda" do angličtiny :-) ale pořád je to uvozené slovem "function", potože v PHP prostě vždycky byly jen funkce, ale pro mě za mě, ať si tomu každý říká jak chce :-) Ale jinak jo, správně se tomu ve třídě říká metoda.
Alphard
Profil
joe:
Protože se teď bavíme o OOP.
Třída, je základním pojmem klasifikace, při návrhu uspořádáváte informace do smusluplné entity. Základním pojmem je objekt. Objekt si „pamatuje“ svůj stav (v podobě dat čili atributů) a poskytuje rozhraní operací, aby se s ním mohlo pracovat (nazývané metody).
To jsem vzal z wikipedie , ze článku obecně o OOP. Je to zavedená terminologie bez ohledu na to, jak se metody v daném jazyce definují.
Timy
Profil
joe:
ale pořád je to uvozené slovem "function"
Ne všechno co má bradavici je Paroubek.
__construct
Profil
joe:
Zase není čistě OOP, jako třeba Java.
Ako príklad OO jazyka a zrovna v súvislosti s metódami by som rozhodne neuvádzal Javu - nepodporuje plnohodnotný model predávania správ jednotlivým objektom ako napr. Smalltalk, Ruby alebo Objective C. tak ako ho definoval pán Alan Curtis Kay. Java je podobne ako PHP iba hybridný jazyk, ktorý objektový model implementuje len čiastočne
Majkl578
Profil
joe:
Jinak pěkné, že jsi přeložil slovo "metoda" do angličtiny :-)
Spíš opačně, z angličtiny.
Řekl bych k tomu víc, ale Alphard mě předstihl. :)
joe
Profil
(OT - poslední odpověď, nemám čas na to se tu dohadovat o věcech, které nejsou nijak podstatné)

Majkl578:
Spíš opačně, z angličtiny.

Ale správně je to metoda, překlad ‚method‘.

Ne. Z češtiny do angličtiny, tak jak jsi to napsal.

Alphard:
Ještě neznamená, že pokud něco používá většina, že to tak pro každého musí platit :) (mimochodem, Wikipedie "prý" není dobrým zdrojem informací, aspoň to všude slýchávám).

__construct:
Java je určitě víc objektová než PHP...
SpotRudloff
Profil
joe:
Java má ale hrozné podmínky pro OOP - uděláš chybu a končíš.
Nox
Profil
Javu neznám ... co znamená končíš? Že to končí s chybou? Pokud's to tak myslel - to je ale nejlepší možná situace ... nějaké tiché přecházení chyb dává za vznik chybám, které se mohou projevit jen někdy a jindy a z mnoha dalších důvodů by to bylo špatné
SpotRudloff
Profil
Nox:
No končíš v tom smyslu že pokud máš dlouhý kód a máš tam chybu, tak Java má hrozné odůvodnění chyb. Navíc Java má hroznou práci s poli.
__construct
Profil
SpotRudloff:
Java má hrozné odůvodnění chyb. Navíc Java má hroznou práci s poli.
..navyše je pomalá atď, atď. Každý jazyk má svoje muchy
S tým „končíš“ rozhodne nesúhlasím - každý program funguje tak ako ho naprogramuješ, takže pokiaľ nevieš používať výnimky tak v každom programovacom jazyku pri chybe „končíš“ ..
joe
Profil
SpotRudloff:
No končíš v tom smyslu že pokud máš dlouhý kód a máš tam chybu, tak Java má hrozné odůvodnění chyb. Navíc Java má hroznou práci s poli.
Tak je to skoro všude. Třeba i u C#. Prostě se ti vypíše, čím vším procházela vyjímka. To, že uděláš chybu a nezachytíš vyjímku, kterou bys měl, tak opravdu končíš v tom smyslu, že se dostaneš až někam do Thread třeba...

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0