[PHP] OOP design probleempje

Pagina: 1
Acties:
  • 297 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey Tweaker,

Ik ben voor mezelf een cmsje aan het opzetten maar heb een probleem mijn classen ontwerp.

In de index maak ik een object aan cms in die construct maak ik een database afhandelingsobject aan. Deze kan ik in de onderliggende functies wel gebruiken maar niet in children classen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class cms {
    
    public $conn;
    
    function __construct() {
        $this->conn = $this->staticInstance(ADONewConnection('mysql'));
        $this->conn->connect('DBHOST','UNAME','PWD','DBNAME');
        $this->loadDefines();
    }

// A generic function to create and fetch static objects
    public function staticInstance($class) { 
    // Declare a static variable to hold the object instance
    static $instance; 
 
    // If the instance is not there, create one
    if(!isset($instance)) { 
        $instance =& new $class; 
    } 
    return($instance); 
    }

    function loadDefines(){
        $this->conn->$debug = 1;
        $arrDefine = $this->conn->GetAssoc('SELECT * FROM cms_defines');
        if (count($arrDefine) >=1) {
            foreach ($arrDefine as $define){
                define($define['name'], $define['value']);
            }
        }
    }


dit werkt perfect, maar wanneer ik een andere classe extend van deze classe gaat het mis.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class module_content extends cms {
        
        public $smarty;
        
        function __construct() {
            /* Setup smarty template engine */
            $this->smarty = new Smarty();
            $this->smarty->template_dir = '/home/dytech/public_html/smarty_templates/templates/content';
            $this->smarty->compile_dir = '/home/dytech/public_html/smarty_templates/templates_c';
            $this->smarty->cache_dir = '/home/dytech/public_html/smarty_templates/cache';
            $this->smarty->config_dir = '/home/dytech/public_html/smarty_templates/configs';
        }
        
        /**
         * function showContent()
         * 
         * Retrieve paragraph values and parse them into smarty to create the template
         *
         */
        function showContent() {
            
            $paragraphs = $this->conn->GetArray("SELECT * FROM `cms_page_content` WHERE `page_id` = $intPageID");
            
            foreach ($paragraphs as $paragraph) {
                
                $this->smarty->assign('pcid', $paragraph['page_content_id']);
                $this->smarty->assign('page_content_title', $paragraph['page_content_title']);
                
                if ($paragraph['page_content_img_id'] >= 1) {
                    $image = $this->conn->GetRow("SELECT * FROM `cms_images` WHERE `img_id` = " . $paragraph['page_content_img_id']);
                    $this->smarty->assign('img', $image['img_filename']);   
                    $this->smarty->assign('pos', $paragraph['page_content_img_pos']);   
                } else {
                    $smarty->assign('img', ''); 
                }
                
                $this->smarty->assign('page_content_text', $paragraph['page_content_text']);
                $this->smarty->display('content_paragraph.tpl');    
                
            }
        }
        
    }


Hier kan ik dus getArray niet bereiken, en als ik getType($this->conn) doe krijg ik NULL.

Ik maak waarschijnlijk een denkfout, wie kan / wil me helpen?

Groetjes Martin

Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
In de constructor van uw child-classe moet je ook nog de constructor van uw parent-classe aanroepen aangezien daar uw connection wordt geinitialiseerd.

En het is ook gebruikelijk om member-variables private of protected te maken, maar niet public.

[ Voor 3% gewijzigd door Feyd-Rautha op 02-09-2006 17:57 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah oke,

misschien hele stomme vraag maar hoe roep ik die parent-constructor dan aan in de constructor van de childclass?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
PHP:
1
2
3
4
5
6
class module_content extends cms {
   public function __construct(){
      parent::__contruct();
      // De rest
   }
}

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
Verwijderd schreef op zaterdag 02 september 2006 @ 18:09:
Ah oke,

misschien hele stomme vraag maar hoe roep ik die parent-constructor dan aan in de constructor van de childclass?
Met een beetje moeite had je dit toch in de manual kunnen vinden ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Als je Smarty als template engine gebruikt in al je classes, kan je ook andersom het gewenste doel bereiken wellicht door Smarty als basis te nemen.

Dus je class cms extenden op smarty (class cms extends smarty)

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

mocean schreef op zondag 03 september 2006 @ 02:51:
Als je Smarty als template engine gebruikt in al je classes, kan je ook andersom het gewenste doel bereiken wellicht door Smarty als basis te nemen.

Dus je class cms extenden op smarty (class cms extends smarty)
Dus dan beschouw je je cms als een uitbreiding op een template engine. Beetje raar als je het mij vraagt.

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik zou sowieso niet zo snel mijn hoofdclass extenden van 3d-party software.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

Rare manier van inspringen heb je trouwens. Vind je dit niet veel overzichtelijker? (Tijdens het bewerken van de inspringingen kwam ik er zo ook achter dat er in jouw code een } te weinig is...)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
    class cms
    {
        public $conn;

        function __construct()
        {
            $this->conn = $this->staticInstance(ADONewConnection('mysql'));
            $this->conn->connect('DBHOST','UNAME','PWD','DBNAME');
            $this->loadDefines();
        }
        
        // A generic function to create and fetch static objects
        public function staticInstance($class)
        {
            // Declare a static variable to hold the object instance
            static $instance; 
            
            // If the instance is not there, create one
            if(!isset($instance)) {
                $instance =& new $class; 
            }
            return($instance);
        }
        
        function loadDefines()
        {
            $this->conn->$debug = 1;
            $arrDefine = $this->conn->GetAssoc('SELECT * FROM cms_defines');
            if (count($arrDefine) >=1) {
                foreach ($arrDefine as $define) {
                    define($define['name'], $define['value']);
                }
            }
        }
    }
?>

[ Voor 0% gewijzigd door Bergen op 03-09-2006 15:40 . Reden: spaties en tabs doorelkaar verprutsen alles weer... ]


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

Bergen schreef op zondag 03 september 2006 @ 15:36:
Rare manier van inspringen heb je trouwens. Vind je dit niet veel overzichtelijker? [...]
Of de K&R of de BSD/Allman indenting style beter is, is een kwestie van smaak.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

RayNbow schreef op zondag 03 september 2006 @ 17:20:
[...]

Of de K&R of de BSD/Allman indenting style beter is, is een kwestie van smaak.
Very true, maar ik doelde meer op stukjes als...
PHP:
1
2
3
4
5
    if(!isset($instance)) { 
        $instance =& new $class; 
    } 
    return($instance); 
    }
... waar accolades recht onderelkaar worden gebruikt waardoor het heel onduidelijk is welke accolade waarbij hoort, en...
PHP:
1
2
3
4
5
6
    public function staticInstance($class) { 
    // Declare a static variable to hold the object instance
    static $instance; 
 
    // If the instance is not there, create one
    if(!isset($instance)) {
...waar de inhoud van de functie evenveel is ingesprongen als de declaratieregel.

Het maakt imo niet uit welk systeem je gebruikt, als het maar duidelijk is welke accolades bijelkaar horen. Zoals ik al zei: er mist een accolade in de TS, probeer maar eens snel te vinden welke dat is...

Acties:
  • 0 Henk 'm!

Verwijderd

Bergen schreef op zondag 03 september 2006 @ 19:23:
[...]

Het maakt imo niet uit welk systeem je gebruikt, als het maar duidelijk is welke accolades bijelkaar horen. Zoals ik al zei: er mist een accolade in de TS, probeer maar eens snel te vinden welke dat is...
Dat hij een accolade mist heeft weinig met rare indenting te maken in dit geval. Hij is alleen in het midden een stukje vergeten te indenten, namelijk dit:
PHP:
1
2
3
4
5
6
7
8
    // Declare a static variable to hold the object instance
    static $instance; 
 
    // If the instance is not there, create one
    if(!isset($instance)) { 
        $instance =& new $class; 
    } 
    return($instance);

Verder is alles gewoon netjes ge-indent en mist de afsluiting van de cms class. :)
Maare, back ontopic, want waarschijnlijk is dat laatste gewoon resultaat van wat foute copy-pasting. :)

edit: Hoewel, in de 2e class is wel rare indenting, namelijk dubbel ge-indent maar de laatste afsluiting niet 2 indents terug. Waarom mag joost weten. :)

[ Voor 19% gewijzigd door Verwijderd op 04-09-2006 02:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Grijze Vos schreef op zondag 03 september 2006 @ 15:09:
Ik zou sowieso niet zo snel mijn hoofdclass extenden van 3d-party software.
Wat is een 'hoofdclass'?
Pagina: 1