Meerdere dezelfde classes (gebruiker kiest)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Online-Gamer
  • Registratie: Juni 2005
  • Laatst online: 25-10-2023
Hallo allemaal,

Ik zal even uitleggen hoe het ongeveer in z'n werk moet gaan. In het project waar ik mee bezig ben zitten verschillende koppelingen naar andere bedrijven. Deze bedrijven moet ik bij bepaalde handelingen informatie toesturen, en bij bepaalde handelingen informatie vandaan halen. Nou kiest de gebruiker op de website bij welk bedrijf dit moet gebeuren.

Dus je hebt bijvoorbeeld een class:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Bedrijf
{
    public function registerCustomer()
    {
        //Hier stuur ik informatie naar het bedrijf
    }

    public function checkInformation()
    {
        //Hier haal ik informatie op van het bedrijf
    }

    public function process()
    {
        //Hier stuur ik informatie naar het bedrijf
    }
}


Dit zijn gewoon even verzonnen functies. Zo heb je natuurlijk nog een tweede bedrijf:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Bedrijf_twee
{
    public function registerCustomer()
    {
        //Hier stuur ik informatie naar het bedrijf
    }

    public function checkInformation()
    {
        //Hier haal ik informatie op van het bedrijf
    }

    public function process()
    {
        //Hier stuur ik informatie naar het bedrijf
    }
}


Deze heeft zoals je ziet precies dezelfde functies, deze worden op bepaalde plekken in de site aangeroepen.
Nou ligt het aan de 'groep' waar de gebruiker bij hoort, welke class hij gebruikt.

Hoe kan ik dit netjes doen? Is een interface handig, aangezien de classes allemaal ergens aan moeten voldoen en allemaal dezelfde functies hebben. Hier heb ik alleen niet veel verstand van.

Hoe is het mooiste met het aanroepen?

PHP:
1
2
require 'classes/' . $cInfo['use_company'] . '.php';
$company = new $$cInfo['use_company'];

Dit lijkt me niet echt de goede / mooiste oplossing.

Heeft iemand toevallig iets in z'n hoofd zitten hoe ik het beste kan realiseren?

Alvast super bedankt! :)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:01
Inheritance & Polymorphisme & een factory pattern.

[ Voor 28% gewijzigd door whoami op 15-07-2009 12:04 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Je hebt dus eigenlijk twee vragen; één met betrekking tot abstractie en één over hoe je dynamisch klassebestanden kunt includen.

Dat tweede zou ik lekker op jouw manier doen; simpel en leesbaar, en gemakkelijk uit te breiden. Het werkt, dus waarom niet? Een andere oplossing zou zijn om het hele gebeuren in een switch te zetten:
PHP:
1
2
3
4
5
6
7
8
9
switch ($cInfo['use_company']) {
  case 'company1' :
    require 'classes/company1.php'; 
    $company = new Company1();
  break;
  default :
    // something with an error
  break;
}

Maar dat is dus minder gemakkelijk uit te breiden :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

Dit is inderdaad het schoolvoorbeeld voor het toepassen van een Interface. Eigenlijk is een interface iets als "Ik weet niet wat het is en hoe hij het doet, maar dit kan hij".

Het aanmaken doe je inderdaad middels het factory pattern. Dat lijkt op wat CodeCaster voorsteld, maar persoonlijk zou ik de require buiten de case halen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Online-Gamer
  • Registratie: Juni 2005
  • Laatst online: 25-10-2023
Bedankt voor de reacties, het 2e probleem ga ik denk ik inderdaad op de simpele manier op lossen! :)

Het 1e probleem heb ik nu een start mee gemaakt, ik heb nu een interface met de functies.
Nu loop ik tegen een ander probleem op wat eigenlijk de situatie een beetje veranderd denk ik.

De classes voor de bedrijven gebruiken allemaal bepaalde functies die ik in een andere class heb zitten (om de informatie daadwerkelijk naar de bedrijven te sturen, denk aan curl).

Is het dan niet handiger om een overkoepelende class te maken?
Dus dat de rest van de classes extend op de overkoepelende class, zo kan ik vanuit de bedrijven-classes de functies aanroepen om het te versturen.
Ik roep dan de overkoepelende class aan met als parameter het bedrijf, de class roept de bedrijf-class aan en deze kan gebruik maken van de parent-class functies.

Is mijn denkwijze nu helemaal verkeerd, of is er toevallig een betere oplossing?
Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 00:30
Online-Gamer schreef op woensdag 15 juli 2009 @ 12:19:
Bedankt voor de reacties, het 2e probleem ga ik denk ik inderdaad op de simpele manier op lossen! :)

Het 1e probleem heb ik nu een start mee gemaakt, ik heb nu een interface met de functies.
Nu loop ik tegen een ander probleem op wat eigenlijk de situatie een beetje veranderd denk ik.

De classes voor de bedrijven gebruiken allemaal bepaalde functies die ik in een andere class heb zitten (om de informatie daadwerkelijk naar de bedrijven te sturen, denk aan curl).

Is het dan niet handiger om een overkoepelende class te maken?
Dus dat de rest van de classes extend op de overkoepelende class, zo kan ik vanuit de bedrijven-classes de functies aanroepen om het te versturen.
Ik roep dan de overkoepelende class aan met als parameter het bedrijf, de class roept de bedrijf-class aan en deze kan gebruik maken van de parent-class functies.

Is mijn denkwijze nu helemaal verkeerd, of is er toevallig een betere oplossing?
Alvast bedankt :)
Als de classes van de verschillende bedrijven overeenkomstige functionaliteit hebben, is het een prima idee om die basisfunctionaliteit op te nemen in één centrale class, om de verschillende bedrijven deze class vervolgens te overerven en waar nodig de functionaliteit uit te breiden of aan te passen :)

What do you mean I have no life? I am a gamer, I got millions!

Pagina: 1