Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Marek Šafránek:24.11.2015 14:16

Dobrý den,
jedu podle tutorialu z knihy PHP 5 Social networking, kde je základní framework realizovaný pomocí Registry pattern a ten obsahuje třídy pro správu databáze, spravu šablon, autentizaci atd., které si vytváří pomocí Factory.

class Registry
{
        /**
         * Pole objektů
         */
        private $objects;

        /**
         * Pole nastavení
         */
        private $settings;

        public function __construct()
        {
        }

        /**
         * Vytvoří nový objekt a uloží ho do registru
         * @param String $object prefix objektu
         * @param String $key klíč pod kterým bude objekt přístupný
         * @return void
         */
        public function  createAndStoreObject( $object , $key )
        {
                require_once( $object . 'class.php');
                $this->objects[ $key ] = new $object( $this );
        }

a neumím si vysvětlit, proč v třídě pro databázi se pomocí konstructoru načítá property $registry:

class Mysqldb
{
        /**
         * umožňuje více spojení s databází
         * každé spojení se uloží jako prvek pole
         * aktivní spojení identifikuje samostatná proměnná
         */
        private $connections = array();

        /**
         * specifikuje spojení, které se má použít
         * voláním setactiveConnection je možné aktivní spojení změnit
         */
        private $activeConnection = 0;

        /**
         * provedené dotazy, jejichž výsledky se uložiliy do mezipaměti
         * pro pozdější použití, primárně pro potřeby šablonového systému
         */
        private $queryCache = array();

        /**
         * připravená data uložená do mezipaměti pro pozdější využití
         * primárně pro potřeby šablonového systému
         */
        private $dataCache = array();

        /**
         * počet provedených dotazů
         */
        private $queryCounter = 0;

        /**
         * výsledek posledního provedeného dotazu
         */
        private $last;

        /**
         * Objekt registru
         */
        private $registry;

        /**
         * konstruktor databázového objektu
         */
        public function __construct(Registry $registry)
        {
                $this->registry = $registry;
        }

zatímco v dalších třídách, které jsou do registru zahrnuty, je pouze property page a není tam $registry

class Template
{
        private $page;

        /**
         * připojí třídu stránky a vytvoří objekt stránky zajišťující
         * správu obsahu a struktury stránky
         * @param Object objekt registru
         */
        public function  __construct(Registry $registry)
        {
                $this->registry = $registry;
                include(FRAMEWORK_PATH . '/registry/page.class.php');
                $this->page = new Page($registry);
        }

Našel jsem k náhledu eng verzi knihy, ten problém je kolem strany 30: http://www.academia.edu/…l_networking

uměl by mi někdo poradit, jestli je to tak správně a nemusím se tím znepokojovat, nebo to v kodu chybí?

Editováno 24.11.2015 14:17
Odpovědět
24.11.2015 14:16
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
Odpovídá na Marek Šafránek
Martin Konečný (pavelco1998):24.11.2015 15:43

Zdravím,

důvod bude zřejmě ten, že třída Template prostě s objektem Registry nepotřebuje pracovat víc, než ho v konstruktoru předá jinému objektu :)
Musím ale říct, že tenhle návrh mi přijde takový zvláštní a moc se mi nezdá. Navíc podle toho musíš mít striktní adresářovou strukturu.

Nahoru Odpovědět
24.11.2015 15:43
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Marek Šafránek:24.11.2015 15:49

Díky, asi to tak bude. ale pak mi zase není jasný proč to píše do těch konstruktoru. Ještě to bude oříšek než se tím prokoušu, chtěl sem se na tom něco víc naučit, ale je to teda kamenolom, navíc sem zjistil že, ve zdrojových kodech knihy jsou ve třídách další funkce, o kterých v knize není ani zmínka....tak nevím, jestli autor předpokládá, že je kniha pro pokročilé, kteří vědí, že to tam má být...a ještě je to domršený českým překladem, ach jo :D

Editováno 24.11.2015 15:50
Nahoru Odpovědět
24.11.2015 15:49
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
Neaktivní uživatel:24.11.2015 16:00

Část knihy jsem četl a příjde mě dost divná. PHP skoro neznám, dělal jsem v něm trochu před dlouhou dobou, ale pokud už musí být SQL (a další) přístupný globálně, radši bych osobně zvolil statiku nebo singleton nebo něco podobného, než registr...

Nahoru Odpovědět
24.11.2015 16:00
Neaktivní uživatelský účet
Avatar
Marek Šafránek:27.11.2015 22:54

takže jsem jen nevěděl, že se dá nová property definovat a zavést přímo až v __construct :) ahá metoda :D

Nahoru Odpovědět
27.11.2015 22:54
Stojí-li něco za námahu, je třeba to udělat pořádně...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.