Avatar billede sylvesternielsen Nybegynder
18. januar 2005 - 01:21 Der er 4 kommentarer og
1 løsning

Struktur i klasser

Jeg sidder med noget kode som jeg ikke kan få til at virke efter hensigten.

Jeg har en klasse kaldet core. I denne klasse skal det være muligt for mig at starte flere andre klasser.

Det er muligt at kalde alle funktioner i disse klasse fra core. Men hvordan laver jeg en afhængighed så jeg kan bruge funktioner i alle andre klasser fra alle klasser.
Her har jeg prøvet med en simpel ting som at skrive:
$database = new database;
$database->core = $this;

Dette fungere også helt fint. Dog er der så problemer med de andre klasser som er startet i core. Jeg kan kalde funktionerne i disse men af en eller anden grund kommer variablerne kun med fra core og ikke fra de andre klasser startet i denne.

Er der en som har en smartere måde at lavde dette på eller ved hvad fejlen er i det jeg har lavet?
Avatar billede jakoba Nybegynder
18. januar 2005 - 01:29 #1
svært at vide uden at se det du har lavet.

en god tommelfinger regel er at lade være med at lave variabelnavne der er de samme som et klassenavn, og også at skrive () efter kaldet til construktorfunktionen, også selvom den ikke behøver nogen parametre
altså:
    $andet_navn_end_database = new database();

men lad os se lidt kode.
Avatar billede sylvesternielsen Nybegynder
18. januar 2005 - 01:36 #2
ok..
min index.php:
require("core.php");
$core = new core;



---------------------------------------------------------
Min core.php:
class core
{

    var $db_host;
    var $db_user;
    var $db_pass;
    var $db_db;
    var $db_type;

    function core()
    {
        require("configs/config.php");
        $this->database();
        $this->security();
        $this->content();
        $this->fill();
    }
   
    function database()
    {

        require("database/database.class.php");
        $this->db = new database($this->db_type,$this->db_host,$this->db_db,$this->db_user,$this->db_pass);
    }
   
    function security()
    {
        // hent filen til sikkerhed
        require("security/security.php");
        // start klasse
        $this->security = new security();
        // læg kernen ind i sikkerhedsklassen
        $this->security->core = $this;
        // check om brugeren er logget ind
        $this->login = $this->security->security_check();
    }
   
    function content()
    {
        // hent filen til indhold
        require("content/content.php");
        // start klassen
        $this->content = new content();
        // læg kernen inde i klassen
        $this->content->core = $this;
        // hent menu
        $this->menu = $this->content->content_menu();
    }
   
    function fill()
    {
        require("class/smarty/smarty/Smarty.class.php");
       
        $smarty = new smarty;
        $smarty->assign('path', 'templates/1');
        $smarty->assign('name', 'Sylvester Nielsen');
        $smarty->assign('address', 'Testvej');
        if ($this->login == 0)
        {
            $smarty->assign('content', 'Du er ikke logget ind');
        }
        else
        {
            $smarty->assign('content', 'Du er logget ind');
        }
        $smarty->assign('users', array(
            array('url' => '#?index.php', 'head' => 'Forsiden'),
            array('url' => '#?index.php', 'head' => 'Profil')
            ));
        $smarty->display('1/index.tpl');
    }

}

--------------------------------------------------------

Min security.php:
class security
{
    function security_check()
    {
        if (!empty($_SESSION['user']))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

----------------------------------------------
Og content.php:
class content
{
    function content_menu()
    {
        $this->core->db->debug_mode();
        $this->core->db->query("SELECT * FROM pages");
        while($row = $this->core->db->get_row()){
            $return[] = $row;
            echo $row['head'];
        }
        return $return;
    }
}
Avatar billede sylvesternielsen Nybegynder
18. januar 2005 - 01:52 #3
Jeg har endeligt fået det til at virke ved at bygge mine databasekald ind i min core istedet.. Dette er dog også acceptabelt..

Men er den metode jeg bruger eller ok, eller er der andre du kan anbefale?
Avatar billede sylvesternielsen Nybegynder
18. januar 2005 - 14:01 #4
lukker dette for at omformulere spørgsmålet.
Avatar billede jakoba Nybegynder
18. januar 2005 - 14:41 #5
din funktion 'database' ser ret meget ud til at være gal.

din funktion hedder 'database' og er i klassens primære scope så gudrene må vide hvad du får ud af at kalde 'new database(...'. Men jeg tvivler på at det er det ønskede objekt af typen 'database'.

Jeg mener virkelig det der med ikke at genbruge samme navn til mange forskellige ting. det giver helt sikkert rod og forvirring, og nogen gange skodder det koden. Du skal være superekspert før du har en chance for at slippe afsted med det.

    function database()
    {

        require("database/database.class.php");
        $this->db = new database($this->db_type,$this->db_host,$this->db_db,$this->db_user,$this->db_pass);
    }

PS: når du debugger er det en god ide at indsætte linien
  error_notify( E_ALL );          // for tæl om alle tvivlsomme kodelinier jeg laver
øverst i php koden, Jeg er ret sikker på den ville have overflødiggjort dette spm.

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester