Diskuze: Registry pattern

PHP PHP Registry pattern American English version English version

Avatar
Marek Šafránek:

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):

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
Avatar
Marek Šafránek:

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
Jakub Šárník:

Čá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
Avatar
Marek Šafránek:

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.