abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 12:33 | Zajímavý software

Článek ne Medium představuje nejnovější stabilní verzi 2.0 svobodné decentralizované mikroblogovací platformy a sociální sítě podobné Twitteru Mastodon (Wikipedie). Detailní přehled novinek na GitHubu [Hacker News].

Ladislav Hagara | Komentářů: 0
dnes 06:00 | Komunita

V Praze na půdě Elektrotechnické fakulty ČVUT dnes probíhá RT-Summit 2017 – setkání vývojářů linuxového jádra a uživatelů jeho real-time verze označované jako preempt-rt. Přednášky lze sledovat online na YouTube.

Ladislav Hagara | Komentářů: 0
včera 14:33 | Zajímavý projekt

Blender Animation Studio zveřejnilo první epizodu z připravovaného animovaného seriálu The Daily Dweebs o domácím mazlíčkovi jménem Dixey. Ke zhlédnutí také ve 3D s rozlišením 8K.

Ladislav Hagara | Komentářů: 0
včera 12:34 | Komunita

Aktualizovanou počítačovou hru Warhammer 40,000: Dawn of War III v ceně 39,99 eur běžící také na Linuxu lze o víkendu na Steamu hrát zdarma a případně ještě v pondělí koupit s 50% slevou. Do soboty 19:00 lze na Humble Bundle získat zdarma Steam klíč k počítačové hře Sid Meier's Civilization® III v ceně 4,99 eur běžící také ve Wine.

Ladislav Hagara | Komentářů: 0
včera 00:22 | Nasazení Linuxu

Společnost Samsung oznámila, že skrze dokovací stanici DeX a aplikaci Linux on Galaxy bude možno na Samsung Galaxy S8 a S8+ a Galaxy Note 8 provozovat Linux. Distribuce nebyly blíže upřesněny.

Phantom Alien | Komentářů: 19
19.10. 23:55 | Komunita

Společnost Purism na svém blogu oznámila, že její notebooky Librem jsou nově dodávány se zrušeným (neutralized and disabled) Intel Management Engine (ME). Aktualizací corebootu na již prodaných noteboocích lze Management Engine také zrušit. Více v podrobném článku.

Ladislav Hagara | Komentářů: 0
19.10. 21:44 | Nová verze

Organizace Apache Software Foundation (ASF) na svém blogu slaví páté výročí kancelářského balíku Apache OpenOffice jako jejího Top-Level projektu. Při této příležitosti byl vydán Apache OpenOffice 4.1.4 (AOO 4.1.4). Podrobnosti v poznámkách k vydání. Dlouhé čekání na novou verzi tak skončilo.

Ladislav Hagara | Komentářů: 6
19.10. 19:22 | Pozvánky

Již příští týden - 26. a 27. října se v Praze v hotelu Olšanka odehraje OpenWRT Summit. Na webu konference naleznete program a možnost zakoupení lístků - ty stojí 55 dolarů. Čtvrtek bude přednáškový a v pátek se budou odehrávat převážně workshopy a meetingy.

Miška | Komentářů: 1
19.10. 13:44 | Nová verze

Bylo vydáno Ubuntu 17.10 s kódovým názvem Artful Aardvark. Ke stažení jsou Ubuntu Desktop a Server, Ubuntu Cloud Images, Ubuntu Netboot, Kubuntu, Lubuntu a Lubuntu Alternate, Lubuntu Next, Ubuntu Budgie, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 22
19.10. 13:00 | Komunita

MojeFedora.cz informuje, že Fedora 27 dostane podporu pro AAC. Podpora multimediálních formátů je ve výchozí instalaci Fedory tradičně limitovaná kvůli softwarovým patentům, ale desktopový tým Red Hatu se ji i tak snaží v poslední době co nejvíce rozšířit. Už nějaký čas obsahuje kodeky pro MP3, H.264, AC3 a nyní byl přidán také kodek pro další velmi rozšířený zvukový formát – AAC.

Ladislav Hagara | Komentářů: 2
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (10%)
 (1%)
 (1%)
 (1%)
 (75%)
 (13%)
Celkem 166 hlasů
 Komentářů: 7, poslední 19.10. 23:06
    Rozcestník

    Dotaz: Getter a Setter v PHP

    25.2.2015 13:41 Marky
    Getter a Setter v PHP
    Přečteno: 910×
    Ahoj, už tři dny mi nedá spát Kit-ova citace

    "Když vývojář napíše getter/setter jako public, poruší tím zapouzdření objektu se všemi důsledky."

    Copak to jde udělat private ? K čemu by pak takový getter měl sloužil a hlavně jak bych pak dostal data z těch class, když potřebuji z jedné metody získat více hodnot?

    Řešení dotazu:


    Odpovědi

    25.2.2015 16:18 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Pokud má třída 3 privátní atributy, 3 gettery, 3 settery a žádnou další metodu, jedná se o 3 nezávislé věci, které třída dělá. Proto by měla být rozdělena do 3 nezávislých tříd. Setter je pak nahrazen konstruktorem, getter prezentační metodou.

    Pokud je atribut privat a je k němu napsán public getter a public setter, v konečném důsledku se ten atribut chová jako public. A to je až na výjimky (messengery) zpravidla nežádoucí.

    V PHP téměř nikdy nepotřebuji manipulovat s jednotlivými atributy objektu. Proto ani gettery/settery nedělám. Jednoduše je nepotřebuji. Vždy pracuji s objektem jako celkem, jinak by to bylo porušením SRP.

    Pokud potřebuji z jedné metody dostat více hodnot, uložím je do objektu další třídy nebo v jednodušších případech použiji zmíněný messenger.

    Použití nezávislých setterů s sebou rovněž nese riziko nekonzistence objektu. Pokud například chceš změnit jméno i příjmení, změníš jméno a než změníš příjmení, tak se někdo zeptá na stav objektu. V tu chvíli je tam nové jméno, ale staré příjmení. A to je problém, který se může projevit i u dvou getterů, které jdou po sobě. Mezitím se stav objektu mohl změnit.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    rADOn avatar 25.2.2015 16:48 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Pokud je atribut privat a je k němu napsán public getter a public setter, v konečném důsledku se ten atribut chová jako public.
    Je tu jeden rozdil – pokud se neco zmeni a ty chces ten atribut ziskat jinym zpusobem, treba ho spocitat z jinych, vytahnout z cache nebo cokoliv, musis opravit potencialne hodne kodu. Pokud jazyk nema zpusob jak zahakovat cteni/nastavovani atributu, tak je psani get/set metod rozumny zpusob jak byt predem pripraven. Kdyz jsou to "nezavisle veci" tak je to samozrejme zbytecne, ale treba v prikladu ktery uvadis jsou jmeno a prijimeni na sobe zavisle. Takze si bud udelas setter ktery nastavi oboji, nebo udelas dva settery ale opatris je vzajemnym zamykanim… v kazdem pripade budes chtit aby samotny atribut byl private aby ti na nej nikdo nesahal.

    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    25.2.2015 17:07 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Jenže já na ty privátní atributy nesahám, takže nic nemusím opravovat ani zamykat.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 16:40 Mercuriuz | skóre: 16 | blog: Mercuriuz | V hospodě =)
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je to jen vtípek... myslím
    Čistě teoreticky můžeš gettery/settery udělat protected a přístup k nim řešit přes child classu, např. pokud child classa poskytuje metody pro zpracování hodnot, může je takto předávat parentovi který zapouzdřuje výsledek.
    Každopádně dělat private všechno, na co nemá chytat nic jiného než classa samotná je velmi užitečný "zlozvyk"

    class Car
    {
        private $VIN,
                $color,
                $owner;
    
        private function convertColorToRgb($hexColor)
        {
            /* funkce která zajistí convert */
            return $rgb;
        }
    
        protected function getData()
        {
            return array("VIN" => $VIN, "color" => $color, "owner" => $owner);
        }
    
        protected function setVIN($vin)
        {
            $this->VIN = $vin;
        }
    
        protected function setColor($color)
        {
            $this->color = $this->convertColorToRgb($color);
        }
    
        protected function setOwner($owner)
        {
            $this->owner = $owner;
        }
    }
    
    class CarLoader extends Car
    {
        public function loadCar($vin)
        {
            $this->setVIN($vin);
            $data = $this->getDatabaseData($vin)
            $this->setColor($data['color']);
            $this->setOwner($data['owner']);
        }
    
        private function getDatabaseData($vin)
        {
            /* funkce která načte auto z databáze a uloží hodnoty do lokálních proměnných $color a $owner */
            return array("color" => $color, "owner" => $owner);
        }
    }
    
    class CarToXml extends Car
    {
        public function getXml()
        {
            $data = $this->getData();
            /* funkce která z dat v proměnné $data udělá xml */
            $return $xml;
        }
    }
    


    Je to samozřejmě jen příklad, jde o to, že child classy přesně ví, co mají do parenta posílat za data a jakým způsobem s ními pracovat, ani jeden setter/getter není z venku dostupný a stejně jde dělat vše co je potřeba.
    Linux users everywhere, raise your keyboards into the air, we´re warriors, warriors of the world.
    25.2.2015 16:47 Mercuriuz | skóre: 16 | blog: Mercuriuz | V hospodě =)
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    $ před return ve funkci getXml() je samozřejmě jen typo
    Linux users everywhere, raise your keyboards into the air, we´re warriors, warriors of the world.
    25.2.2015 16:51 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No nazdar... Jako vtípek je to ale docela dobré. Jenom trochu ... nepoužitelné.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 17:17 Mercuriuz | skóre: 16 | blog: Mercuriuz | V hospodě =)
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    no tak nejvhodnější příklad to zrovna není, ale nic lepšího sem zrovna nevymyslel
    Linux users everywhere, raise your keyboards into the air, we´re warriors, warriors of the world.
    25.2.2015 17:33 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Co třeba tohle? Trochu jsem to předělal podle sebe.
    class Car {
        private $vin;
        private $color;
        private $owner;
        private $db;
    
        function __construct($db, $vin) {
            $this->db = $db;
            $this->vin = $vin;
            $data = $this->findCar($vin);
            $this->color = self::convertColorToRgb($data['color']);
            $this->owner = $data['owner'];
        }
    
        private function findCar($vin) {
            /* funkce která načte auto z databáze a uloží hodnoty do lokálních proměnných $color a $owner */
            return $select->fetch(); //array("color" => $color, "owner" => $owner);
        }
    
        private static function convertColorToRgb($hexColor) {
            /* funkce která zajistí convert */
            return $rgb;
        }
    
        function __toString() {
            /* funkce která z dat v proměnných $vin, $color a $owner udělá $xml */
            return $xml;
        }
    }
    
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 18:04 DarkKnight | skóre: 25
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    A co kdyz nechce pouzivat Active Record? Co kdyz se nehodi do navrhu architektury? Co kdyz potrebuju hloupy model, ale s kontrolou vstupu?
    25.2.2015 18:24 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Tak si udělej hloupý model s kontrolou vstupu. Tohle není Active Record, protože neumožňuje modifikaci v DB.

    Je to hodně zjednodušená verze architektury, kterou používám. V reálu tam proměnnou $data a příslušné atributy vůbec nemám. View (který mám v jiné třídě) dostane záznam přímo z DB přes messengera. Konverze barev, data, času apod. do HTML či XML je jeho starost.

    V daném případě jsem považoval za zbytečné to dělit do svých čtyř vrstev a napsal jsem to do jedné třídy. Vadí to moc?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 25.2.2015 22:18 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    K tomhule 3 připomínky:
    1. Celkem není důvod nepoužít getter/setter například pro tu barvu. Zapouzdření není svatá kráva. Pokud budou ty gettery/settery napsaný tak, že nemůžou dostat objekt do nekozistentního stavu, tak v tom opravdu nevidim problém. Pokud by existovala třída Color, která by sama o sobě zajišťovala konzistentní uložení barvy, tak by klidně Car mohlo mít barvu jako veřejný atribut, pokud nejsou na barvu nějaké další omezující podmínky.
    2. Funkce convertColorToRgb nemá v třídě Car co pohledávat, vzhledem k tomu, že se stará o konverzi barev. Taky se mi na ní nelíbí, že je statická, ale přitom zamíchaná mezi nestatické.
    3. Funkce findCar mi tam taky moc nesedí, čekal bych, že bude vracet instanci Car a že bude statická nebo úplně mimo třídu Car.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 05:11 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    1. Nevidím důvod, proč by barva měla mít vlastní getter/setter. Není potřebný, není to Active Record.
    2. Ta funkce je součástí zadání. V reálu bych ji refaktoroval např. do Color::convertToRgb(), protože s třídou Car nesouvisí. Statická metoda přitom mezi nestatickými ničemu nevadí.
    3. Souhlasím, refaktorování této metody jsem nedotáhl. Už ten název findCar() si zaslouží přejmenovat na find().
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 10:04 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Nevidím důvod, proč by barva měla mít vlastní getter/setter. Není potřebný, není to Active Record.
    Je otázka, k čemu teda vlastně vůbec ta třída informaci o barvě má.

    Dejme tomu, že budu chtít načíst auto, zobrazit jeho barvu, případně ji změnit a zase ho uložit. Jak to uděláš bez getterů/setterů?
    Statická metoda přitom mezi nestatickými ničemu nevadí.
    No je to otázka stylu. Mně to přijde podobné, jako míchat private a public metody. Technicky vzato to ničemu nevadí, ale přehlednost to opravdu nezvyšuje...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 10:23 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Nevidím důvod, proč by barva měla mít vlastní getter/setter. Není potřebný, není to Active Record.
    Je otázka, k čemu teda vlastně vůbec ta třída informaci o barvě má.
    Nevím, tu si vymyslel Mercuriuz. Třeba proto, aby ji prezentoval na webu?
    Dejme tomu, že budu chtít načíst auto, zobrazit jeho barvu, případně ji změnit a zase ho uložit. Jak to uděláš bez getterů/setterů?
    Načtení auta a zobrazení barvy už tady máme. Zápis nové barvy bude v metodě Color::update()
    Statická metoda přitom mezi nestatickými ničemu nevadí.
    No je to otázka stylu. Mně to přijde podobné, jako míchat private a public metody. Technicky vzato to ničemu nevadí, ale přehlednost to opravdu nezvyšuje...
    Je zvykem psát nejprve public a pak privat metody. Hodláš mě buzerovat za to, že jsem tady přehodil pořadí?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 10:46 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Načtení auta a zobrazení barvy už tady máme.
    Jestli tím myslíš to view co dostává záznam z DB, tak to zní jako docela hnus :-D
    Zápis nové barvy bude v metodě Color::update()
    Což je setter :-D
    Je zvykem psát nejprve public a pak privat metody. Hodláš mě buzerovat za to, že jsem tady přehodil pořadí?
    Ne, to určitě ne, je to detail. Mně je jedno, jaký konvence kdo dodržuje, dokud je to konzistentní a čitelný.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 11:01 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Zápis nové barvy bude v metodě Color::update()
    Což je setter :-D
    Nevím, jestli se to dá označit jako setter, když to zapisuje do databáze. Setter by přece neměl mít postranní efekty.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 11:31 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Přestávám tomu rozumět... Public settery jsou fuj, ale vzít to oklikou přes databázi, o které by nějaká třída Color IMHO vůbec neměla vědět, je ok :-D

    Jinak ale objekty nemusí vůbec být ukládány do databáze, to je v podstatě specielní případ. Takže jak nastavíš tu barvu bez databáze a bez setteru?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 11:36 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Však tu barvu nastavuji do databáze. Jinam ji nedávám, protože ji nikde jinde nepotřebuji.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 11:50 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To, že se v tvém konkrétním případě rozhodneš tu barvu neukládat do objektu, ale procedurálně někam jinam (do databáze), s otázkou nemá nic společného.

    Značná část (řekl bych naprostá většina) objektů nikdy nebude uložena do databáze, ale přitom potřebuju měnit jejich stav. Jak to chceš udělat bez public setterů mi fakt není jasný.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 11:53 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Proč potřebuješ měnit stav atributů objektu, který vzápětí zahodíš? Bez uložení do databáze taková změna nemá žádný smysl.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 12:07 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Wtf? To, že objekt neukládám do databáze, přece neznamená, že ho hned zahodim.

    Dám radši konkrétní případ: V jednom projektu generuju strom položek na základě dat z databáze. Výstupní strom má o dost jinou strukturu než data v databázi, jednak protože stromy se do databáze typicky neukládají moc dobře a zadruhé protože data se určitým způsobem transformují před odesláním do aplikace u klienta. Součástí výsledného stromu objektů jsou všelijaké atributy, vč. tuším i té barvy, které během zpracování data potřebuju nastavovat (přímo nebo přes settery). Výsledné objekty se serializují do jsonu a posílají přes rest api. Nevidim, proč by měly být tyhle settery špatně.

    Jiný příklad, tentokrát mimo web, protože ten tvůj výrok zní dost obecně: QColor::setAlpha() - opět nevidim, proč by takovýhle setter měl být špatně a čím ho nahradit.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 12:38 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Místo setterů obvykle používám konstruktory. Obvykle se tím view dost zjednoduší.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    26.2.2015 11:33 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Setter by přece neměl mít postranní efekty.
    BTW i vytvoření objektu je side effect.
    26.2.2015 11:27 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Načtení auta a zobrazení barvy už tady máme.
    Jestli tím myslíš to view co dostává záznam z DB, tak to zní jako docela hnus :-D
    Můj view vždy dostane přímý výstup z PDO, do objektu třídy Car se nic neukládá. Tady je to trochu odlišně a zpětně to už předělat nemohu.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 11:41 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Njn, to ale pak není OOP návrh. Třída Car tam je pak k čemu?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 11:50 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Třída Car je servisní vrstvou k databázi.

    Už jsem psal, že to co tady mám v jedné třídě, mám v reálu ve čtyřech vrstvách. Jediné, co si objekt třídy Car drží jako atribut, je $vin. Nemá ani databázi - tu vždy dostane od modelu.

    Mám tu třídu refaktorovat a poslat ji sem znovu?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 11:54 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Třída Car je servisní vrstvou k databázi.
    To znamená, že ji používáš na co?
    Mám tu třídu refaktorovat a poslat ji sem znovu?
    No jestli to pomůže objsanit, k čemu ta třída je...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 12:31 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Používám ji pro manipulaci s persistentními daty domény Car.
    class Car implements Insertable, Findable, Updatable, Deletable {
        private $data;
    
        function __construct(array $data) {
            $this->data = clone (object) $data;
        }
    
        function find(PDO $db) {
            $select = $db->prepare("SELECT * FROM car WHERE vin=?");
            $select->execute(array($this->data->vin));
            return $select->fetch(PDO::FETCH_OBJ);
        }
    
    /* Podobně i
        function insert ...
        function update ...
        function delete ...
    */
    }
    Zbytek je práce modelu, view a controlleru.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 12:51 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Jediný, čim se tahle třída liší od libovolné jiné třídy reprezentující objekt v databázi, je to jméno tabulky - car - a jméno sloupečku s primárním klíčem (předpokládám) - vin. Jestli neobsahuje žádné vlastní chování, tak je v podstatě zbytečná.
    Zbytek je práce modelu, view a controlleru.
    Takže tam máš ještě nějakou modelovou třídu Car?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 13:08 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Ta třída je vlastně adaptérem. V principu nepracuje s tabulkou car, ale s doménou Car, což v daném případě vypadá jako totéž. Jakmile však do domény Car přidám další tabulky s podmínkami a joiny, už tak zbytečně vypadat nebude. Také obsluhuje výjimky při práci s databází.

    Model je jen jeden, drží databázi a objekt třídy Car se do něj injektuje. Model přidá tu svou databázi do parametru volané metody.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 13:23 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    V aplikačních objektech řešíš joiny a výjimky databáze, ve view řešíš PDO, model je jen jeden (Wtf? To je jako veškerá logika apliace v jedný třídě?), všechno je propojený se vším, tomu se odborně říká spaghetti code...

    Ale jo, taky jsem takový věci napsal... Nedávno jsem musel jednu takovou aplikaci dešpagetizovat...

    Přidej si tam nějaký gettery/settery a hned to bude lepší ;-) Ne, to si dělám srandu, spíš ORM framework to chce...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 13:38 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Logika domény je v jedné třídě. Těch domén je obvykle víc než tabulek a běžně se překrývají.

    View o PDO nemá ani potuchy. Jak jsi na to přišel?

    Jak jsi přišel na to, že všechno je propojené se vším? To bych se do svých limitních 65 řádek/třídu nevešel.

    K čemu mi bude ORM framework, když mám své domény? Konfigurace ORM je mnohem složitější a hůř udržovatelná.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 13:52 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    View o PDO nemá ani potuchy. Jak jsi na to přišel?
    "View (který mám v jiné třídě) dostane záznam přímo z DB přes messengera" ?
    Jak jsi přišel na to, že všechno je propojené se vším? To bych se do svých limitních 65 řádek/třídu nevešel.
    Takže i ten model má 65 řádek? Moc si neumim představit, jak v 65 řádcích napsat něco užitečnýho aniž by se to muselo rozdělit na bambilion tříd...
    K čemu mi bude ORM framework, když mám své domény? Konfigurace ORM je mnohem složitější a hůř udržovatelná.
    ORM je k tomu, že nemusíš (tolik) řešit databázi v rámci aplikace. Psát hromadu SQL queries pro každej objekt, kterej má bejt persistovanej do DB je zbytečná práce. Náročnost konfigurace ORM záleží na ORM vrstvě, existují i zeroconf ORM (např.).
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 14:08 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    View o PDO nemá ani potuchy. Jak jsi na to přišel?
    "View (který mám v jiné třídě) dostane záznam přímo z DB přes messengera" ?
    No a? Jak to souvisí s PDO?
    Jak jsi přišel na to, že všechno je propojené se vším? To bych se do svých limitních 65 řádek/třídu nevešel.
    Takže i ten model má 65 řádek? Moc si neumim představit, jak v 65 řádcích napsat něco užitečnýho aniž by se to muselo rozdělit na bambilion tříd...
    Když si na to zvykneš, tak už si ani nevzpomeneš na doby, kdy jsi je psal delší.
    K čemu mi bude ORM framework, když mám své domény? Konfigurace ORM je mnohem složitější a hůř udržovatelná.
    ORM je k tomu, že nemusíš (tolik) řešit databázi v rámci aplikace. Psát hromadu SQL queries pro každej objekt, kterej má bejt persistovanej do DB je zbytečná práce. Náročnost konfigurace ORM záleží na ORM vrstvě, existují i zeroconf ORM (např.).
    Pro každou doménu mám obvykle 1-5 SQL dotazů. To se mi nezdá zas tak moc a dobře se to spravuje. Navíc se mi nechce do modelu tahat nějaké konfigurační parametry pro ORM. Nějak to nakonfigurovat musíš, aby věděl, jaké máš tabulky a sloupce v nich. Můj model nic takového nepotřebuje, struktura databáze ho nezajímá. Všechno deleguje na domény.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 14:46 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No a? Jak to souvisí s PDO?
    No jestli jsem to správně pochopil, tak do view posíláš, co vyleze z PDO. Což je přinejmenším zvláštní - na jednu stranu krituješ gettery/settry, že porušují zapouzdření, ale na druhou stranu ti nevadí posílat do view holý data z PDO, který zapouzředný nejsou vůbec nijak.
    Když si na to zvykneš, tak už si ani nevzpomeneš na doby, kdy jsi je psal delší.
    Hlavně nevidim důvod, proč si na to zvykat. Ten tvůj model fakt má <65 řádek?
    Pro každou doménu mám obvykle 1-5 SQL dotazů. To se mi nezdá zas tak moc a dobře se to spravuje.
    Například budeš muset 1-5 dotazů upravit při každé změně dotyčné 'domény', tj. přidání/odebrání položky apod. Což neříkám, že je nějaká tragédie, ale dělat by se mi to stejně nechtělo...
    Navíc se mi nechce do modelu tahat nějaké konfigurační parametry pro ORM. Nějak to nakonfigurovat musíš, aby věděl, jaké máš tabulky a sloupce v nich.
    Jak říkám, záleží to na ORM vrstvě. Některý mají šílenou konfiguraci. Jiný mají konfiguraci, která je IMHO příjemnější než psát N*5 dotazů. Ten zeroconf ORM, co jsem linkoval, skutečně žádnou konfiguraci nemá, protože schéma generuje automaticky z modelových objektů přes reflexi. Takže když přidám atribut do modelové třídy, ORM vrstva automaticky přidá sloupek do příslušné tabulky, a podobně.

    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 15:11 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No a? Jak to souvisí s PDO?
    No jestli jsem to správně pochopil, tak do view posíláš, co vyleze z PDO. Což je přinejmenším zvláštní - na jednu stranu krituješ gettery/settry, že porušují zapouzdření, ale na druhou stranu ti nevadí posílat do view holý data z PDO, který zapouzředný nejsou vůbec nijak.
    Je to messenger, který zapouzdření nepotřebuje a nepotřebuje ani gettery. Výstup z libovolného getteru také nebývá zapouzřený.
    Když si na to zvykneš, tak už si ani nevzpomeneš na doby, kdy jsi je psal delší.
    Hlavně nevidim důvod, proč si na to zvykat. Ten tvůj model fakt má <65 řádek?
    36.
    Pro každou doménu mám obvykle 1-5 SQL dotazů. To se mi nezdá zas tak moc a dobře se to spravuje.
    Například budeš muset 1-5 dotazů upravit při každé změně dotyčné 'domény', tj. přidání/odebrání položky apod. Což neříkám, že je nějaká tragédie, ale dělat by se mi to stejně nechtělo...
    Totéž bych musel udělat i v případě ORM. Prašť jako bouchni. Obvykle stačí modifikovat pouze ten SQL dotaz a nic víc. Doména se přizpůsobí reflexí.
    Navíc se mi nechce do modelu tahat nějaké konfigurační parametry pro ORM. Nějak to nakonfigurovat musíš, aby věděl, jaké máš tabulky a sloupce v nich.
    Jak říkám, záleží to na ORM vrstvě. Některý mají šílenou konfiguraci. Jiný mají konfiguraci, která je IMHO příjemnější než psát N*5 dotazů. Ten zeroconf ORM, co jsem linkoval, skutečně žádnou konfiguraci nemá, protože schéma generuje automaticky z modelových objektů přes reflexi. Takže když přidám atribut do modelové třídy, ORM vrstva automaticky přidá sloupek do příslušné tabulky, a podobně.
    To jako to ORM modifikuje strukturu tabulek v databázi? No nazdar. Další důvod pro to nepoužívat ORM. Proč se všichni toho SQL tak bojí, že potřebují ORM?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 16:04 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je to messenger, který zapouzdření nepotřebuje a nepotřebuje ani gettery.
    Já nemluvil o messengeru ale o těch datech, který "messenguje", ty zapouzdřený asi nebudou, jestli to správně chápu. Další věc je, že když ti ty data neprochází přes model, tak nemáš moc možnost je nějak zpracovat/tranformovat/apod...
    To jako to ORM modifikuje strukturu tabulek v databázi? No nazdar.
    Ano, tohle ORM upravuje schéma podle potřeby, v čem je problém?
    Proč se všichni toho SQL tak bojí, že potřebují ORM?
    Nevim jak ostatní, já osobně se SQL nebojím, spíš jde o to, že mě nebaví, vnímám to jako zdržení. Vždyť je to jen způsob, jak uložit data. IMHO méně babrání se s databází = více času pro aplikační logiku. Pro ilustraci třída Car napsaná pro RedBean ORM:

    class Car implements RedBean_SimpleModel {
    	const table = 'car';
    
    	public static function find($vin) {
    		// Minimalistický SQL snippet:
    		return R::findOne(self::name, 'vin = ?', array($vin));
    	}
    
    	// CRUD funkce netřeba psát, stačí použít
    	// R::store($car) pro update, R::trash($car) pro delete apod.
    
    	// ...
    	// zde může být logika modelu Car
    	// ...
    }
    
    To máme nějakých 6 řádek kódu nebo kolik :-D Tvůj přístup je ale zjevně jiný, soustředíš se hlavně na data v DB spíš než na OOP apod... Tím určitě nechci říct, že to je špatně, jestli ti to vyhovuje, tak prosim, ale není to úplně pozice, ze které by měl někdo vynášet obecné soudy o getterech/setterech a zapouzdření, zejména, když sám zapouzdření moc nepoužívá ;-)
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 17:36 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je to messenger, který zapouzdření nepotřebuje a nepotřebuje ani gettery.
    Já nemluvil o messengeru ale o těch datech, který "messenguje", ty zapouzdřený asi nebudou, jestli to správně chápu. Další věc je, že když ti ty data neprochází přes model, tak nemáš moc možnost je nějak zpracovat/tranformovat/apod...
    Máš zapouzdřená data, která získáš getterem? Asi ne, tak nekritizuj můj messenger.

    Data prochází přes model, ale nevidím důvod, proč by je měl model jakkoli zpracovat/tranformovat/apod. To není jeho účelem. Má se starat pouze o správu externích datových zdrojů a to dělá.
    To jako to ORM modifikuje strukturu tabulek v databázi? No nazdar.
    Ano, tohle ORM upravuje schéma podle potřeby, v čem je problém?
    Problém je v tom, že zpravidla nechci nebo ani nesmím modifikovat strukturu databáze, protože je na ni napojena další aplikace, kterou bych takovým činem mohl nabořit.
    Proč se všichni toho SQL tak bojí, že potřebují ORM?
    Nevim jak ostatní, já osobně se SQL nebojím, spíš jde o to, že mě nebaví, vnímám to jako zdržení. Vždyť je to jen způsob, jak uložit data. IMHO méně babrání se s databází = více času pro aplikační logiku.
    Vnímám to přesně obráceně. Proč bych se měl babrat s aplikační logikou v PHP, když mi to udělá databáze jedním dotazem a ještě se přitom sama postará o kolize?
    Pro ilustraci třída Car napsaná pro RedBean ORM: To máme nějakých 6 řádek kódu nebo kolik :-D
    To jsme na tom stejně s ORM i bez něj. Navíc ti tam chybí ta databáze, asi ji máš globální. To bych nesnesl.
    Tvůj přístup je ale zjevně jiný, soustředíš se hlavně na data v DB spíš než na OOP apod... Tím určitě nechci říct, že to je špatně, jestli ti to vyhovuje, tak prosim, ale není to úplně pozice, ze které by měl někdo vynášet obecné soudy o getterech/setterech a zapouzdření, zejména, když sám zapouzdření moc nepoužívá ;-)
    Tam, kde máš dvojici getter+setter, mám plnohodnotnou třídu. Zapouzdření používám i tam, kde ty ho nemáš.

    Práce s daty v DB je pohodlnější než v PHP. Je také spolehlivější a výkonnější.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 18:27 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Máš zapouzdřená data, která získáš getterem? Asi ne, tak nekritizuj můj messenger.
    Data získaná getterem typicky zapouzdřená jsou, protože to jsou buď primitivní hodnoty, nebo něco složitějšího, a pak je to zapouzdřeno v objektu nějaké třídy (třeba ta Color apod.).

    Tvůj Messenger jsem nekritizoval, jen jsem napsal, že posílá nezapouzdřená data, to ale nemusí být špatně.
    Data prochází přes model, ale nevidím důvod, proč by je měl model jakkoli zpracovat/tranformovat/apod. To není jeho účelem. Má se starat pouze o správu externích datových zdrojů a to dělá.
    V MVC je model jádro aplikace, obsahuje veškerou aplikační logiku a zpracovávat data je jeho účelem.
    Problém je v tom, že zpravidla nechci nebo ani nesmím modifikovat strukturu databáze, protože je na ni napojena další aplikace, kterou bych takovým činem mohl nabořit.
    Ok, tak to potom jo, ale já jsem tímhle omezen nebyl. Nicméně ten framework umožňuje uzamčení schématu, což v produkčním prostředí je stejně potřeba udělat, protože jinak by šel výkon do kytek. Takže do schméatu nezasahuje, pokud to nedovolíš.
    Proč bych se měl babrat s aplikační logikou v PHP, když mi to udělá databáze jedním dotazem a ještě se přitom sama postará o kolize?
    Protože v SQL máš jen velmi omezené možnosti aplikační logiky. V některých případech to může stačit (to, co popisuješ, vypadá jako dosti tenká vrstva nad DB). V mém případě jsem potřeboval s daty dělat různý věci, vč. třeba grafových operací, SQL by mi nestačilo ani náhodou... Jinak o schopnosti databází (rychlost hledání, detekce kolizí, apod.) pochopitelně nepřijdu ani s ORM, to by jinak nemělo smysl vůbec db používat ;-)
    To jsme na tom stejně s ORM i bez něj. Navíc ti tam chybí ta databáze, asi ji máš globální. To bych nesnesl.
    U tebe vidím těch řádků o dost více, zejména pokud by se měly doimplementovat ty ostatní CRUD funkce. Jestli je databáze globální záleží u tohohle ORM podle způsobu použití, v nejjednodušším případně se používá jedna globální DB a statické funkce, je ale možné používat objektové API a/nebo více DB. Ta aplikace, co jsem řešil, používá DB dvě.
    Tam, kde máš dvojici getter+setter, mám plnohodnotnou třídu. Zapouzdření používám i tam, kde ty ho nemáš.
    Zatím jsem v tom tvém návrhu nenašel jediný příklad zapouzdření. Například o té třídě Car výše se asi těžko dát říct, že data o autě zapouzdřuje, když s těmi daty pracuješ někde jinde úplně mimo rozhraní té třídy Car. Vždyť ta třída ani vlastně pořádně neví, jaký data drží, takže tam o nějakém zapouzdření moc nemůže být řeč...

    Znovu připomínám, že to nemusí být nutně špatně, naopak je klidně možné, že to tak je lepší.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 19:06 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    V MVC je model jádro aplikace, obsahuje veškerou aplikační logiku a zpracovávat data je jeho účelem.
    Používám MVCS, ve kterém servisní vrstva (obsluha domén) dělá aplikační logiku a částečně přebírá původní funkci modelu. Pokud by to bylo pro ni moc práce, přidal bych další mezivrstvu. Model je ve své podstatě zakonzervován a už se nemění.
    U tebe vidím těch řádků o dost více, zejména pokud by se měly doimplementovat ty ostatní CRUD funkce. Jestli je databáze globální záleží u tohohle ORM podle způsobu použití, v nejjednodušším případně se používá jedna globální DB a statické funkce, je ale možné používat objektové API a/nebo více DB. Ta aplikace, co jsem řešil, používá DB dvě.
    Ty řádky jsem tam expandoval ze své obsluhy databáze, aby to neztratilo logiku. Ve skutečnosti těch řádek mám stejně.
    Zatím jsem v tom tvém návrhu nenašel jediný příklad zapouzdření. Například o té třídě Car výše se asi těžko dát říct, že data o autě zapouzdřuje, když s těmi daty pracuješ někde jinde úplně mimo rozhraní té třídy Car. Vždyť ta třída ani vlastně pořádně neví, jaký data drží, takže tam o nějakém zapouzdření moc nemůže být řeč...

    Znovu připomínám, že to nemusí být nutně špatně, naopak je klidně možné, že to tak je lepší.
    To byl účel. Reflexe se občas hodí - z toho messengeru přímo generuji atributy do DOMu. Pokud do SELECTu v doméně přidám jeden sloupec, ihned se mi objeví ve výstupním stromu. Úplně stejně bych generoval JSON.

    Možná tě mate hvězdička v mém SELECTu. Ve skutečnosti tam mám definici sloupců ve stejné struktuře, kterou potřebuji ve view, včetně správných názvů atributů. Formátování výstupních dat, jejich seskupování a případnou lokalizaci řeší výstupní šablona ve view.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 20:07 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No takže tahle aplikace je spíš takový zobrazovač+editor dané databáze, jinak to nedělá vůbec nic...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 20:16 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Myslíš si snad, že takových aplikací je méně než 90 % celého webu? Dělal jsem to tak, abych to mohl libovolně rozšiřovat na všech vrstvách a přitom nemusel zasahovat do již hotových částí.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 20:44 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Myslíš si snad, že takových aplikací je méně než 90 % celého webu?
    Ano ;-) Můžeš se třeba zamyslet, jak by se bez aplikační logiky realizovala tahle diskuse... (Protip: moc to nejde).
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 20:53 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Co na tom nejde? Vždyť na takové diskuzi té aplikační logiky moc není. Jeden SELECT do databáze, 8 řádek uspořádání do stromu a šup s tím do šablony. K tomu zápis nového příspěvku s mezináhledem a nějaká administrace.

    Nejvíc práce je s bižuterií okolo, ale té aplikační logiky tady fakt moc není.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 21:14 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No nevim, jestli bys to narval do 8 řádků, myslim, že spíš ne. Ty komentáře AFAIK nejsou v DB ve stejném pořadí jako je vidíš v diskusi. Nicméně i těch 8 řádků už mi přijde jako aplikační logika moc velká na to, aby se to povalovalo někde v rámci nějakého God objectu (Messenger apod.). Další věc je, že by to mělo být schopno rekurzivně mazat celé podstromy, že, to máme dalších pár řádků, které by se neměly někde náhodně povalovat...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 21:27 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Kdysi jsem napsal takovou hračku: Prezentace stromové struktury z databáze a jak vidíš, není to nic extra složitého.

    Je otázkou, zda je lepší rekurzívně mazat podstromy nebo uvolněné větve nechat zakořenit. V každém případě se se stromovou strukturou v relační databázi pracuje docela blbě.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 02:44 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je otázkou, zda je lepší rekurzívně mazat podstromy nebo uvolněné větve nechat zakořenit.
    Ábíčko umí afaik oboje. V každém případě ale na tyhle věci je potřeba obslužný kód, který už řadím do aplikační logiky...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 06:31 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To je jen implementační detail, protože to závisí na typu použité databáze. Případně to můžeš přenechat svému ORM.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 10:04 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Jj, RB v tomhle ohledu má nějaké funkce...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 10:19 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Také se to dá udělat rekurzívním SQL dotazem.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    26.2.2015 20:40 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Vždyť ta třída (Car) ani vlastně pořádně neví, jaký data drží, takže tam o nějakém zapouzdření moc nemůže být řeč...
    Ale ví. Drží $vin toho auta a nejen to. Drží i nová data pro insert() či update().
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 20:54 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Drží proměnnou $data, tzn. nějaký data, možná ví o $vin, ale jinak o těch datech nic netuší. Anebo tuší, ale pak jsi neříkal pravdu ohledně toho počtu řádků...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 21:03 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Musí si ta vstupní data sanitovat, zvalidovat a ošetřit chybějící položky. To je tak 20 řádek navíc, takže se do těch 65 řádek na třídu stále v pohodě vejdu. I kdybych se nevešel, tak je to soft-limit, podobně jako 80 sloupců je také soft-limit.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    27.2.2015 13:15 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Njn, to ale pak není OOP návrh. Třída Car tam je pak k čemu?
    Existuje ještě jedno pravidlo: OOP se s relačními databázemi nemá rádo. Vždy mezi nimi musí být kus procedurálního kódu. Někdo použije ORM framework, někdo si napíše vlastní wrapper na 50 řádcích.

    Třída Car se tedy na jednu stranu chová objektově (viz polymorfní metody find, insert, update) a na druhou stranu (směrem k DB) relačně. Některé aspekty zvládne PDO a něco musí udělat wrapper. Nemůže si dovolit chovat moc objektově (viz Active Record), protože udržování cache je náročné. Proto jsem povinnost držet data ponechal primárně na databázi a sekundárně v controlleru či view.

    Balíky dat si mezi sebou posílají přes messengery. Vzhledem k tomu, že to jsou kopie, může si s nimi příjemce dělat co chce a není nutné je nijak zapouzdřovat.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 17:39 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Existuje ještě jedno pravidlo: OOP se s relačními databázemi nemá rádo.
    Tak to souhlas, oni any ty beans v RedBeanPHP nejsou zapouzdřený, když se odečte automatické generování schématu, modely a další fíčury, tak je to dost podobný těm tvým balíkům s reflexí...

    Technicky vzato by se ty beans daly zapouzdřit důslednějc, ale imho to nemá moc cenu... Beztak pedantické schovávání všeho do private už dost vychází z módy ;-)
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    25.2.2015 17:44 OldFrog {Ondra Nemecek} | skóre: 28 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    A což teprve public třídy, to je teprv svinstvo! :-D Člověk se vystavuje riziku, že tu třídu někdo použije!

    Nad tím by se měl každý zamyslet...
    -- OldFrog
    25.2.2015 17:49 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Hele, běž si trolit jinam a udělej si tam privátní interface.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 18:33 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    BTW: Zapomněl jsem dát smajlík :-) Tebe za trolla nepovažuji.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 18:07 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Tak to mě už několikrát napadlo, když tak někdy čtu Kit-a.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    oryctolagus avatar 25.2.2015 22:20 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    +1. Proč někteří lidé berou poučky z teorie OOP jako náboženská přikázání?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    25.2.2015 22:49 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    On je to mnohem užší pohled (náboženství) než „teorie OOP“, ale aspoň je veselo… ;-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    26.2.2015 05:27 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    A proč je někdo potřebuje za každou cenu obcházet přes gettery/settery?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 10:02 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Gettery/settery nejsou obcházení ;-)
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 10:26 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je to veřejný přístup dovnitř objektu. Je to tedy porušení zapouzdření.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 10:42 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To je IMHO zcela nicneříkající průpovídka, vzhledem k tomu, že pravděpodobně používáme trochu jinou definici zapouzdření. Mně nepřijde, že ty funkce, který jsi například napsal výše u toho auta, by zasahovaly dovnitř objektu míň než gettery/settery.

    Ale určitě se nechci hádat o definice, to nemá moc smysl, zkus radši popsat případ, kdy getter/setter povede k nečemu negativnímu a co konkrétně to negativum je.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 10:51 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Nadužívání getterů/setterů vede ke tvorbě tzv. anemických modelů. Tedy takových, které samy o sobě nic neumí a je nutné dělat kolem nich servisní třídy, aby byly nějak použitelné. Výsledkem je procedurální kód, který je zbytečně líný.

    U getterů/setterů se také blbě dělá polymorfismus. Pokud getter nazvu getColor(), stěží ho mohu použít k získání jména majitele auta.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 26.2.2015 11:24 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Ok, takže nadužívání getterů/setterů není dobrý, s tím celkem souhlasim, ono nadužívání víceméně čehokoli není dobrý ;-) Ale to ten tvůj citát moc nepodpoří.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    26.2.2015 11:29 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To není citát, ale výrok.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    27.2.2015 18:49 Matlák
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Pokud getter nazvu getColor(), stěží ho mohu použít k získání jména majitele auta.

    To zní dost divoce... inu PHP. Já mám tedy raději, když jsou všechny operace nad každým objektem přesně definované. A asi mi ani nevadí, když má třída 150 řádků nebo víc, když je o sobě schopná všechno říct už kompilátoru.
    27.2.2015 19:13 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To nijak nesouvisí s PHP. Jak tedy pojmenuješ metodu v interface, pokud ho bude používat třída Car i třída Owner a má poskytovat v textové podobě informaci i stavu objektu?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 20:21 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To zní jako něco jako toString(), nebo co má ten interface dělat?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 20:35 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Poznal jsi to správně, ale kdybys měl toString() blokováno pro jiný účel nebo potřeboval jiný typ návratové hodnoty, např. nějaký token? Hmm, pak bys to asi nazval getToken() nebo asToken(). Tak tedy dvojici [klíč=>hodnota].

    Jinak interface nic nedělá, pouze popisuje vlastnosti rozhraní.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 20:41 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Neboj, vím, co je interface :-D Interface sice sám o sobě nic nedělá, ale popisuje nějaké chování. Jinak ale moc nechápu, kam tím vším směřuješ, to, že se metoda pojmenuje pokudmožno smysluplně je snad samozřejmé, ne?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 20:50 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To ano, ale název metody getColor(), který by měl být společný pro třídy Car i Owner na třídu Owner nepasuje. Podobně by nepasoval společný název metody getName().

    Mířím k polymorfismu, který se v případě getterů/setterů nedá dost dobře použít.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 20:54 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Proč by jako měl být společný pro ty dvě třídy? To IMHO nikdo nechtěl.

    Jinak pokud by tenhle getter měl být společný pro víc tříd, může být definováno rozhraní Colorable s metodami setColor() a getColor(), například...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 21:17 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Například metodu $model->find() mám společnou pro hledání objektu v databázi. Svým způsobem je také getter, jen má jako atribut objekt, podle kterého se hledá. Přitom model netuší, ve které tabulce, resp. doméně bude ta data hledat. To mu dodá ten objekt.

    Místo $model->findCar($id) a $model->findOwner($id) mám tedy $model->find($car) nebo $model->find($owner). Výstup nacpu do DOMu nebo do JSONu dle potřeby a nemusím se zajímat o to, co jsem vlastně z databáze vytáhl. Polymorfismus a reflexe se postará o zbytek.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 23:15 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    No a? Nějak mi není jasný, co to má společného s diskusí. Gettery/settery nejsou určený na tahání dat z DB.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 23:26 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Gettery/settery nejsou určený na tahání dat z DB.
    ... protože jsou k ničemu.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 23:34 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    :-D :-D

    Dával jsem tu příklad setteru, máš možnost vysvětlit, proč je k ničemu a jak mám bez něj nastavit alpha hodnotu pixelu v pixmapě...
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    27.2.2015 23:45 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    To mám kvůli tomu přepisovat celou třídu?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 27.2.2015 23:56 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Nemusíš. Stačí vysvětlit. Nebo třeba na kousku (pseudo)kódu:

    pixmap.pixel(0, 0).setAlpha(128);

    Opravdu nevidim, proč by měl bejt ten setter špatně. Nepřipadá mi k ničemu. Jasně, alpha by se u barvy mohla nastavovat v konstruktoru, ale tady už je vytvořená.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    28.2.2015 00:03 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Opravdu netuším, proč bych měl jednomu pixelu nastavovat průhlednost, ale budiž:
    pixmap.pixel(0, 0).Alpha = 128;
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 28.2.2015 00:10 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Dva problémy: 1) alpha je private (navíc nemusí vůbec existovat jako samostatný atribut, barva může být uložena v jednom integeru apod.), 2) tímhle způsobem bys mohl nastavit neplatnou barvu:

    pixmap.pixel(0, 0).Alpha = 9001;

    A jsme mimo povolený rozsah 0-255.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    28.2.2015 00:17 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Pořád jsi nenapsal, proč by se alpha mělo měnit. Jaká je příčina této změny. Vždyť pixmap netuší, proč má měnit průhlednost. Jaká událost nastala?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 28.2.2015 00:27 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Však taky pixmap tu změnu průhlednosti nezpůsobuje. Může to být například součástí nějakého vykreslovacího algoritmu, který potřebuje měnit alpha složku některých pixelů.

    Jestli ti to připadá nesmyslné, můžeme uvažovat setter pro celý pixel na pixmapě:

    pixmap.setPixel(x, y, color);

    Příkladem použití může být třeba algoritmus vykreslující přímku do té pixmapy.

    Bereš to jako příklad, nebo mě donutíš najít příklad setteru v nějakém kódu online?
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    28.2.2015 09:48 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Myslel jsem si, že poznáš setter napsaný v jiné syntaxi. Tím oba problémy odpadají. Lepší by však bylo tu konstantu zapouzdřit do Alpha, aby se platnost alfy mohla ověřit už při kompilaci.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 28.2.2015 11:27 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Myslel jsem si, že poznáš setter napsaný v jiné syntaxi.
    Myslel jsem si, že to není setter, protože jsem se ptal, čím ty blbé settery, které jsou tak k ničemu, nahradit. Nenapadlo mě, že navrhneš nahrazení setteru setterem.
    Lepší by však bylo tu konstantu zapouzdřit do Alpha, aby se platnost alfy mohla ověřit už při kompilaci.
    1) Platnost se neověří při kompilaci, protože hodnota je dynamická.
    2) I kdyby dynamická nebyla, možnost ověřit ji staticky je úplně stejná v konstruktoru jako v setteru, konstruktor je member funkce úplně stejně jako setter.
    3) I když se alpha zapoudří do nějaké další třídy kvůli ověření rozsahu, stále ji potřebuju do třídy Color dostat setterem.
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    28.2.2015 13:36 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Ono je to u procedurálního kusu kódu vcelku jedno, zda tam setter je či není.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    oryctolagus avatar 28.2.2015 16:38 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    :-D
    Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
    25.2.2015 18:13 Marky
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Díky za info, zajímavé čtení.. Znamená to tedy, že když mám cca 50 class v celém webu a nemám tam ani jeden return, dělám to špatně?
    25.2.2015 18:27 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Je to přinejmenším velmi zvláštní. Zřejmě v těch třídách používáš příkaz echo.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.2.2015 18:49 Marky
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Příkaz echo mám v celém projektu pouze jednou a to přímo ve View kterýn ty sračky vypisuji :-D
    25.2.2015 18:55 Kit
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Takže jednotlivé komponenty sázíš do nějakého veřejně dostupného objektu nebo ho do nich injektuješ?
    25.2.2015 19:10 Marky
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Ano, sázím to do objektu který předávám příslušným class jako parametr. Je to strašně přehledné na nějaké úpravy. Čili mám pouze jeden objekt (jiné pro žádnou class nevytvářím, nepotřebuji je) a jedno již zmiňované echo. Sice vše funguje absolutně bez problému, zabraná paměť max < 1MB. Otázka ale je to ostatní, a to je to, co nevím :-(
    25.2.2015 19:51 Kit | skóre: 38 | Brno
    Rozbalit Rozbalit vše Re: Getter a Setter v PHP
    Pokud to funguje a vyhovuje ti to, nevidím problém.

    Pokud to někde vystavíš, rád se na to podívám.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.