Autor Zpráva
lidoop
Profil *
Mohli byste mi poradit jak v PHP vytvořit třídu, respektive objekt, do kterého chci přidávat další objekty? A jak takový objekt použít.
Someone
Profil
V čem je problém? Třída vypadá takto:
class mojeTrida {
}

objekt vytvoříš instancí:
$objekt = new mojeTrida();
lidoop
Profil *
JJ, ale jak to udělat abycch do $objekt mohl uložit jiné objekty.

$objekt = new mojeTrida($obj);
by mělo uložit $obj do $objekt . Jestli to jde. Jestli to teda není blbost. možná by to mělo být spíše do $objekt.obj, kde obj je pole objektů?


Je tedy možné mít objekt který je zároveň polem a zároveň má konstruktor?
donny
Profil
lidoop:
Je zjavné že sa púšťaš do niečoho o čom nemáš vôbec predstavu, bude lepšie ak si prečítaš nejaký tutoriál o základoch OOP, napr na intervale
Someone
Profil
lidoop:
Záleží k čemu to budeš využívat.
class Player {
    private $name;
    public function __construct($name) {
        $this->name = $name;
    }
}
class Game {
    private $players = array();
    public function addPlayer($name) {
        $this->players[] = new Player($name);
    }
}
$game = new Game();
$game->addPlayer('Bob');

V tomhle případě se objekt přidává metodou do nějakého privátního pole.
Nebo objekt může vznikat v konstruktoru:
class MojeTrida {
    private $nejakyObjekt;
    public function __construct() {
        $this->nejakyObjekt = new nejakyObjekt();
    }
}

Je to dost individuální.

K metodám a vlastnostem se v PHP přistupuje přes šipečku "->" tzn.:
$objekt -> mojeMetodaNapis('Hello world');
lidoop
Profil *
Dám tedy příklad, ale je to jen pro ilustraci:

Představte si že máte nějaké data z formuláře a
chcete je uložit do objektu. Dejme tomu, že se to týká elektronické pošty,
příchozí a odchozí pošty (můžou mýt i koncepty). Hodnoty které je třeba vyplnit jsou v obou případech
stejné: from, to, subject, text, attachment, date (nebo ještě folder)... chcete tedy mít objekt
"from" a object "to".

Zajímá mě, jestli se dá (a jak) vytvořit něco tak jednoduchého, aby jste potom
mohli skladovat všechny emaily from pod objektem from. A u to zase v to.

Someone:
Takže ve výsledku to bude uložené jako pole přímo v tom $objekt? Čili bych to mohl zpřístupnit pomocí $objekt[0], $objekt[1], $objekt[2] atd?


Tak jak tak na to koukám, tak asi to nevytváří pole, ale vlastnosti... U toho pole by byla totiž výhoda, že se dá jednoduše projet v cyklu. Ale zase chápu, že pole a objekt je rozdíl, takže to asi nejde. Nevím jestli něco takového by bylo vůbec z obecného pohledu OOP možné byď v jakémkoliv jazyce? Třeba JS?
Someone
Profil
lidoop:
Ok, nyní souhlasím s donnym, že by sis měl nastudovat základy OOP.
Přistupovalo by se k tomu přes $game->players[0] (jen za předpokladu, že by se private změnilo na public). Je to vlastnost, která je polem Je to vlastnost, ve které je uložené pole (přijde mi to méně zavádějící). Foreach cyklus se na to dá taky aplikovat:
foreach($game->players as $player) {
    echo $player->name // opět by musela být vlastnost name public.
}

Jak chceš ukládat emaily do objektu? Objekt existuje jen po dobu běhu skriptu. Musíš mít pro ta data nějaké uložiště. DB,SESSION,SOUBOR (session je samozřejmě nesmysl, jen jsem nechtěl mít pouhé 2 příklady :))
lidoop
Profil *
Byl to jen příklad... Ale v php to zjevně nejde. Takže to nebudeme řešit. Předpokládám že ani v JS to nejde...
Someone
Profil
lidoop:
Nejde o to, že je to příklad. Jde o to, že je to nesmysl.

v php to zjevně nejde
Kde konkrétně tohle jde?
donny
Profil
lidoop:
Byl to jen příklad... Ale v php to zjevně nejde. Takže to nebudeme řešit. Předpokládám že ani v JS to nejde.

Chyba vôbec nie je v príklade, ale v logike toho čo chápeš pod pojmom objekt.

Představte si že máte nějaké data z formuláře a
chcete je uložit do objektu.

Nie, už tu je tvoja logika mimo, nie je žiadny dôvod niečo uchovávať v objekte (ak tak sa to predsta prevedia len v danom čase keď ten skript niekto spúšťa a ak zatvorí prehliadač to čo tam robil sa z objektu stráca). Aký to má význam? Najčastejšie je riešením použitie databázy (napr. MySQL, ale aj iných, podľa potreby) a ukladanie dát do tabuľky ktorú si predpripravíš.

Vďaka databáze s tým potom už môžeš pracovať kdeľkolvek, efektívne a relatívne rýchlo za predpokladu že to tak naprogramuješ.

Předpokládám že ani v JS to nejde...
Javascipt je úplne mimo.
lidoop
Profil *
donny:
v php to zjevně nejde“
Kde konkrétně tohle jde?
na to se ptám já


donny:
ie, už tu je tvoja logika mimo, nie je žiadny dôvod niečo uchovávať v objekte
Logika není chybná, tak zněl dotaz jestli to jde. A promiň ale já nemluvil o trvalém uložení dat. Jen uložení během toho chodu aplikace.
donny
Profil
Počas chodu aplikácie sú data s formuláru uložené v premennej resp. poli $_POST, vytvárať nový objekt na to aby si nejakým spôsobom ukladal niečo ešte raz v rámci behu skriptu nemá význam, keď pre nič iné tak pretože po spustení niečoho ďalšieho sa (pravdepodobne) na servery opätovne spustí nejaká iná časť tvojho skriptu do ktorej by si to zase musel nejako posúvať ($_GET, $_POST, $_SESSION)........... preto je riešením ukladanie dát do nejakého úložiska.

Akokoľvek rád by som ti poradil, v takejto obecnej rovine je to veľmi ťažké, ostáva mi len konštatovať že to čo požaduješ je jednoducho nereálne a uvedený príklad by sa riešil úplne inak
lidoop
Profil *
Jak jsem řekl v 20:48:57 nebudeme to řešit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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