Získání dat z třídy v PHP

Marty

Získání dat z třídy v PHP
« kdy: 08. 11. 2013, 11:05:01 »
Zdravím všechny ve spolek. ;-) Mám třídu Sablona, z této třídy volám třídu Pozadavky, z této třídy volám požadovanou třídu, která zpracuje údaje a výsledky uloží do 3 "private" proměnných. Jenže nevím, jak inteligentně dostat tyto tři výdledky do třídy Sablona. Napadá mne, že mužu vytvořit pomocnou třídu třeba Pomocník, uvnitř vytvořit "getter" metodu pro každou proměnnou a poté nastavit dědění třídy Pomocník pro všechny třídy, tak získam přístup k proměným. Nebo můžu vytvořit v třídě Sablona instanci pro každou volanou třídu a tu instanci předávat parametrem do všech potřebných proměnných. Nebo nejlepší řešení, nechat si zde poradit. Děkuji za pomoc.
« Poslední změna: 08. 11. 2013, 14:42:46 od Petr Krčmář »


Kozzi

Re:Jak získat data z požadované class v php
« Odpověď #1 kdy: 08. 11. 2013, 11:56:28 »
Zdravím všechny ve spolek. ;-) Mám třídu Sablona, z této třídy volám třídu Pozadavky, z této třídy volám požadovanou třídu, která zpracuje údaje a výsledky uloží do 3 "private" proměnných. Jenže nevím, jak inteligentně dostat tyto tři výdledky do třídy Sablona. Napadá mne, že mužu vytvořit pomocnou třídu třeba Pomocník, uvnitř vytvořit "getter" metodu pro každou proměnnou a poté nastavit dědění třídy Pomocník pro všechny třídy, tak získam přístup k proměným. Nebo můžu vytvořit v třídě Sablona instanci pro každou volanou třídu a tu instanci předávat parametrem do všech potřebných proměnných. Nebo nejlepší řešení, nechat si zde poradit. Děkuji za pomoc.

Trochu se v tom ztracim, ale hned na zacatek bych podotkl, ze idealne bych si ty vysledky ulozil do nejake datove struktury, coz je v php bud pole nebo cista trida bez getteru a setteru s public clenama. Celkove se na predavani dat hodi DTO (Data Transfer Object)

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak získat data z požadované class v php
« Odpověď #2 kdy: 08. 11. 2013, 12:35:09 »
Udržet to čistě objektově = použít tupý objekt pro předávání dat.

Kód: [Vybrat]
class ReturnValueDTO {
     public $value1;
     public $value2;
     public $value3;
     ...

     public __construct($value1, $value2, $value3 ...) {
          $this->value1 = $value1;
          ...
     }

}

kde $value1 (atd.) by samozřejmě měly být smysluplně pojmenovány a vyplatí k nim hodit i PHPDoc type-hinty. Asociativní pole funguje samozřejmě taky, ale tímto docílíš přesného kontraktu, kde ihned jak Ty, tak Tvoje IDE vidí, co metoda vrací. Samozřejmě se to dá použít i na vstupní parametry - pokud je jich řekněme víc jak 5, zabalit je do samostatného objektu je lepší volba.

Ostatní věci, co psal Kozzi, samozřejmě budou fungovat taky. Tohle je IMHO nejlepší cesta (a nejen v PHP, platí to obecně pro objektové jazyky nebo procedurální jazyky, které podporují struktury - v práci to používáme skoro furt na C/C++/C#).

Marty

Re:Jak získat data z požadované class v php
« Odpověď #3 kdy: 08. 11. 2013, 12:47:46 »
eMko: Nějak mi ale uniká pointa tý třídy ReturnValuDTO. Jediné co třída dělá, je, že nastaví proměnné, ale nějak nerozumím, kdy ji mám volat. Díky

Kozzi

Re:Jak získat data z požadované class v php
« Odpověď #4 kdy: 08. 11. 2013, 13:56:32 »
eMko: Nějak mi ale uniká pointa tý třídy ReturnValuDTO. Jediné co třída dělá, je, že nastaví proměnné, ale nějak nerozumím, kdy ji mám volat. Díky

Tak misto toho aby si ty vysledky ukladal do 3 privatnich promennych, tak je ulozis do instance toho DTO a ten si vratis


Marty

Re:Jak získat data z požadované class v php
« Odpověď #5 kdy: 08. 11. 2013, 14:06:04 »
Kozzi: No ale pokud vytvořím instanci třídy ReturnValueDTO uvnitř třídy která je vytvořená ve třídě Pozadavky, těžjo se na ty data dostanu z tý třídy Sablona, ve který ta data potřebuji mít. Díky

Kozzi

Re:Jak získat data z požadované class v php
« Odpověď #6 kdy: 08. 11. 2013, 17:03:44 »
Kozzi: No ale pokud vytvořím instanci třídy ReturnValueDTO uvnitř třídy která je vytvořená ve třídě Pozadavky, těžjo se na ty data dostanu z tý třídy Sablona, ve který ta data potřebuji mít. Díky
A to jako proc, si to vrat ne? Hele nechces nekam hodit ten kod, jen kostru jak to volas, tak jak si to popsal to moc neni videt co vlastne chces

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Získání dat z třídy v PHP
« Odpověď #7 kdy: 08. 11. 2013, 21:13:10 »
eMko: Nějak mi ale uniká pointa tý třídy ReturnValuDTO. Jediné co třída dělá, je, že nastaví proměnné, ale nějak nerozumím, kdy ji mám volat. Díky

Tak misto toho aby si ty vysledky ukladal do 3 privatnich promennych, tak je ulozis do instance toho DTO a ten si vratis

Co je na tom prosím k nepochopení?

Kód: [Vybrat]
class Pozadavky {
     function getPozadavky(...) {
          ...
          $retDto = new ReturnValueDTO();
          $retDto->value1 = ...;
          ...
          return $retDto;
     }
}

class Sablona {
     function something(...) {
          $requirements = new Pozadavky();
          $reqVals = $requirements->getPozadavky(...);
          echo $reqVals->value1;
     }
}

Nevím, jestli je to syntakticky správně, ale měla by na tom být vidět pointa. Funkce vracející objekt. Nic světoborného ;-)

Samozřejmě offtopic rada - psát kód anglicky. Většina počítačových jazyků (snad vyjma Brainfucku) vychází z angličtiny - při psaní názvů česky z toho vznikne nepěkná spatlanina. Některé dialekty Smalltalku umožňují v názvech proměnných použít veškeré znaky z UTF-8. Věř tomu, že jsem viděl kód, kde názvy proměnných byly Rusky - azbukou. Tam se PHPčko zatím ještě nedostalo, ale když na netu vidím části kódu česky nebo v práci finsky, vždy si na to vzpomenu :-)