[php] Goed omgaan met meerdere classes in een systeem.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hey,

ik ben een systeem aan het maken waarin ik met meerdere classes ga werken, en ik vroeg me af hoe ik het nu het beste aan zou kunnen pakken.

Ik heb op dit moment een globale file, waarin ik algemene zaken heb staan zoals het verbinden met de database server, selecteren van de database, wat kleurenschema's, etc.

Daarnaast heb ik bijvoorbeeld de volgende 3 classes:

Users
Files
Notes

In de users class staan alle user gerelateerde zaken zoals logincheck, profile edit, login, logout, etc.
Bovenin elke class zet ik de tabellen die in die class nodig zijn.

Om nu het probleem waar ik mee zit weer te geven; in de Files class wordt behalve de files tabellen, ook de users tabel gebruikt, en in de Notes tabel de users tabel en de files tabel (naast de notes).

Niet echt netjes dus, het liefst heb ik alle tabellen op 1 plek in mijn systeem staan, zodat als ik een tabelnaam aanpas, ik dat maar op 1 plek hoef te doen...

M'n vraag is dus, waar plaats ik die, en hoe zorg ik ervoor dat ze dan wel in alle classes beschikbaar zijn? Moet ik het totaal anders aanpakken, of ....?

Acties:
  • 0 Henk 'm!

  • EL_Loco
  • Registratie: Oktober 2001
  • Laatst online: 08-11-2023

EL_Loco

alias Haco

Ik werk niet met classes, en weet er dus niet veel van, maar kun je niet een user class maken, en die dmv variabelen aanroepen in de andere classes :?
gewoon een spinsel, weet of het klopt wat ik zegt :)
-edit-
dat wat Tux zegt :>

[ Voor 8% gewijzigd door EL_Loco op 31-10-2003 21:10 ]

rumores non hiatus dremelunt
malleo omnia consentiunt
Lid van het Anti-Jamba front!


Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Je kan met references de classes aan elkaar koppelen d.m.v. parameters in de constructors.

Bijv.
index.php
PHP:
1
2
3
$users = new users;
$files = new files ($users);
$notes = new notes ($users, $files);


files class
PHP:
1
2
3
4
5
6
7
8
9
10
11
class files
{
    function files (&$users)
    {
        $this->users = $users;
     }
     function ($params)
     {
          $this->users->functie ($params);
     }
}


notes class
PHP:
1
2
3
4
5
6
7
8
9
class notes 
{
    function notes (&$users, &$files)
    {
         $this->users = $users;
          $this->files = $files;
     }
     //enz.
}

[ Voor 4% gewijzigd door Tux op 31-10-2003 21:05 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 24-06 00:27

Jurgle

100% Compatible

* Jurgle snapt niet helemaal wat je wil

Kan je niet gewoon met $GLOBALS[] werken?

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Jurgle schreef op 31 oktober 2003 @ 21:05:
* Jurgle snapt niet helemaal wat je wil

Kan je niet gewoon met $GLOBALS[] werken?
Ik doelde precies op dat wat Tux postte... bedankt man! :)
Zo gaat het perfect... ik wist niet dat dat mogelijk was.

Acties:
  • 0 Henk 'm!

Verwijderd

Tux schreef op 31 oktober 2003 @ 21:05:
PHP:
1
2
3
$users = new users;
$files = new files ($users);
$notes = new notes ($users, $files);
Weet niet of het veel in performantie schilt maar in PHP(4) wordt standaard een kopie van de klasse teruggeven met het new statement, waardoor ik gebruik

PHP:
1
$users = &new users;

Acties:
  • 0 Henk 'm!

Verwijderd

In aanvulling op Tux, alleen dan iets netter:

PHP:
1
2
3
$users = new users;
$files = new files( $users );
$notes = new notes( $files );


files class
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
class files
{
    function files (&$users)
    {
        $this->users = $users;
     }

     function getUsers()
     {
          return $this->users;
     }
}


notes class
PHP:
1
2
3
4
5
6
7
8
9
10
class notes 
{
    function notes ( &$files )
    {
          $this->files = $files;

          $users = $files->getUsers();
     }
     //enz.
}
[/quote]

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hmm, ik heb nu in een algemene class m'n tabellen aangewezen, op de volgende manier;

PHP:
1
2
3
4
5
6
7
class Config {
    
    function Config() {
        
        $this->tblUsers = "gebruikers";
    }
}


als ik nu in m'n Users class dit heb:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Users {
    
    function Users(&$config) {
        
        $this->config = $config;
    
    }
    
    function test() {
        
        $usersTabel = $this->config->tblUsers;
        
        echo "$usersTabel";
    }
}


Dan krijg ik in plaats van 'gebruikers', 'Object->tblUsers' terug... wat doe ik precies verkeerd?

[ Voor 25% gewijzigd door TangLeFuzZ op 01-11-2003 11:45 ]


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Hoe maak je de instanties van de klasse aan en hoe roep je de functie aan. Post dat even.

Systeem | Strava


Acties:
  • 0 Henk 'm!

Verwijderd

Dat heeft waarschijnlijk met referenties te maken.
Kijk hier eens: http://gathering.tweakers.net/forum/list_messages/715644/

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Brakkie schreef op 01 november 2003 @ 11:52:
Hoe maak je de instanties van de klasse aan en hoe roep je de functie aan. Post dat even.
Dat doe ik op deze manier:
// classes starten
$CL_CONFIG = new Config;
$CL_USERS = new Users($CL_CONFIG);

$CL_USERS->test();

Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Users {
    
    function Users(&$config) {
        
        $this->config =& $config;
    
    }
    
    function test() {
        
        $usersTabel = $this->config->tblUsers;
        
        echo "$usersTabel";
    }
}


Heb een extra & voor $config gezet in je function users. Probeer eens :)

[ Voor 21% gewijzigd door Brakkie op 01-11-2003 12:29 ]

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hmm nee, dat is het niet... of iig, hij geeft nog steeds Object->tblUsers terug...

Acties:
  • 0 Henk 'm!

Verwijderd

Zo moet ie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Users {
    
    function Users($config) {
        
        $this->config =& $config;
    
    }
    
    function test() {
        
        $usersTabel = $this->config->tblUsers;
        
        echo "$usersTabel";
    }
}

edit:
Ik heb even gekeken maar alle bovenstaande mogelijkheden werkten

[ Voor 21% gewijzigd door Verwijderd op 01-11-2003 12:48 ]


Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 15:41

mOrPhie

❤️❤️❤️❤️🤍

Even, meer als kantekening, maar wel belangrijk als het gaat om de manier van denken wanneer je met classes bezig bent:

De classe geef je altijd de naam van 1 "instantie". De klasse wordt dan niet "users", maar "user". Dit klinkt mierenneukerig, maar het bevordert de begrijpelijkheid en je zult zien dat je de klasse ook logisch gezien anders gaat benaderen. Een verzameling users zul je dan gaan zien als bijvoorbeeld een "UserCollection". Een UserCollection is dan een verzameling user-classes.

Dit is beginkennis OOP, en zeker niet irrelevant! Als je mijn verhaal nog niet helemaal snapt, dan zul je dus even terug moeten gaan naar de roots en meer moeten gaan lezen over OOP. Zover als dat php4 OO is natuurlijk. Het zou een hoop antwoorden die je zoekt, al geven. :)

Succes ermee!

[ Voor 13% gewijzigd door mOrPhie op 01-11-2003 13:02 ]

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Acties:
  • 0 Henk 'm!

Verwijderd

TangLeFuzZ schreef op 01 november 2003 @ 11:45:
PHP:
1
2
3
4
5
6
7
class Config {
    
    function Config() {
        
        $this->tblUsers = "gebruikers";
    }
}
Misschien een domme opmerking, maar heb je wel een class variabele tblUsers gedefinieerd in je Config klasse ?

PHP:
1
2
3
4
class Config {
    var $tblUsers;
    ...
}


ps: volgens mij mag je die quotes rondom je echo statement ook gewoon weglaten hoor :)

[ Voor 7% gewijzigd door Verwijderd op 01-11-2003 13:55 . Reden: te vroeg op knoppie gedrukt :| ]

Pagina: 1