Portál AbcLinuxu, 10. května 2025 02:02

Dotaz: Upřesnění class v php

30.4.2012 13:31 Dušan S.
Upřesnění class v php
Přečteno: 241×
Odpovědět | Admin
Ahoj, chtěl bych se zeptat, jestli je tohle správný zápis v php.
$menu = new menu();
$menu = $menu->menuTop();
a taky bych potřeboval poradit, jak ošetřit to, že když vytvořím objekt třeba new foo() ale v jiné třídě potřebuji taky zavolat foo() ale nevím jestli již ten objekt neexistuje, jestli jsem ho nevolal dříve. Díky za pomoc...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.4.2012 13:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Upřesnění class v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Správný je, ale je divný, první řádek vytvoří instanci třídy menu a přiřadí ji do proměnné, druhý řádek zavolá metodu té instance a její výsledek uloží do stejné proměnné - tedy ji přepíše a odkaz na instanci již není.
new Foo() vytvoří instanci třídy Foo a instancí si můžete vytvořit kolik chcete, jestli chcete mít jen jednu instanci, definujte si třídu jako Singleton.
Případně můžete použít statické proměnné a fce.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
30.4.2012 22:15 Dušan S.
Rozbalit Rozbalit vše Re: Upřesnění class v php
Děkuji za objasnění
Josef Kufner avatar 30.4.2012 23:31 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Upřesnění class v php
Singleton nebrat, je to stejná prasárna jako globální proměnné.

Jen výjimečně je opravdu potřeba zajistit, že nebude existovat druhá instance. V drtivé většině případů to je jen lenost/neschopnost programátora, předávat si potřebný objekt napříč programem.
Hello world ! Segmentation fault (core dumped)
1.5.2012 10:20 l4m4
Rozbalit Rozbalit vše Re: Upřesnění class v php
Říkáš-li A, měl bys ale říci i B a podle stejné logiky zavrhnout i veškeré statické členy tříd. Já neříkám tak ani tak, ale zkrátka zapotřebí být konzistentní.
1.5.2012 10:20 l4m4
Rozbalit Rozbalit vše Re: Upřesnění class v php
s/zapotřebí/je zapotřebí/
Josef Kufner avatar 2.5.2012 11:10 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Upřesnění class v php
Jo, statické členy jsou to samé, ale aspoň jsou omezeny na prostor té dané třídy. Navíc satické metody jsou užitečné/nutné, pokud potřebuješ např. factory metodu (i konstruktor lze chápat jako statickou metodu) nebo pro různé pomocné nástroje, které nemají/nepotřebují vazbu na konkrétní instanci. Statické členské proměnné pak můžou být užitečné v podobě různých konstant.

Singleton je ale jen objektový obal na globální proměnnou. Navíc maskuje, kde se vlastně používá -- objekt vrácený metodou getInstance lze přiřadit čemukoliv, takže není na první pohled zřejmé, s čím máš tu čest. U globální proměnné máš aspoň stejný symbol všude (sice pak může nastat problém s kolizema, ale většinou je její název dostatečně unikátní).

Jak ke globálním proměnným, tak k singletonu i statickým členům by měl být vždy hodně dobrý důvod. Tím, že se singleton dostal mezi "hezké" návrhové vzory, se používá i tam, kde k tomu důvod není a spousta lidí si neuvědomuje, že "jedna instance ⇒ singleton" je blbost.
Hello world ! Segmentation fault (core dumped)
1.5.2012 17:01 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Upřesnění class v php
Hm, tak to je slovo do pranice…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.