Objecten in andere objecten gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yorian

Yorian

10/11/2008 17:26:00
Quote Anchor link
Zoals in mijn andere bericht te zien is ben ik bezig met een gebruikerssysteem. In veel andere objecten heb ik gebruikersinformatie nodig, denk aan een gastenboek waarbij je het gebruikers-id en naam wilt hebben.

Hoe maak je dan bijvoorbeeld een gastenboek? Geef je een user-object mee als referentie via de constructor o.i.d.?
 
PHP hulp

PHP hulp

05/01/2025 01:59:18
 
Steven Hack

Steven Hack

10/11/2008 18:15:00
Quote Anchor link
door de functies public te maken?

Dan doe je gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class gastenboek {
  public function show_users() {
    return true;
  }
}


class database extends gastenboek {
  var
$db_name;
  function
database() {
    $this->db_name = 'database';
  }
}


$class = new database();
if($class->show_users() == true) { echo 'goed'; }
else { echo 'fout'; }
?>

Dit zou moeten werken, als je het zo bedoeld.
Gewijzigd op 01/01/1970 01:00:00 door Steven Hack
 
Yorian

Yorian

10/11/2008 18:22:00
Quote Anchor link
Hmm, ik vind het een beetje raar om een database class een gastenboek te laten extenden. Verder zie ik de link tussen show_users() en gastenboek niet echt.

Iets concreter voorbeeld:
ik wil een bericht maken in het gastenboek en ben ingelogd (als user zijnde). Stel dat ik ook nog eens admin ben en er dus knopjes moeten zijn als 'wijzig' of 'verwijder'.

In het gastenboek moet ik dus een gebruiksobject aanspreken met gebruikersdata en dit opvragen o.i.d.

Ik kan moeilijk de objectnaam gebruiken o.i.d. moet ik dan de gegevens meegeven via een constructor? En hoe zit dat als de rollen van een gebruiker op wil vragen die bijvoorbeeld zich in een instantie van de class userRoles bevinden?

De handigste manier lijkt me dus dat ik die gegevens aan de constructor meegeef, maar dan kan het dus voorkomen dat ik nogal wat informatie via de constructor meegeef en ik weet niet of dat wel handig is...
 
Rens nvt

Rens nvt

10/11/2008 18:29:00
Quote Anchor link
Waarom zet je je user object niet in een sessie variabele bijvoorbeeld? Als je elke keer bij het constructen variabelen mee moet sturen krijg je al snel stugge code. Nu is het je user object, maar misschien dat je zo nog een object nodig hebt, en nog 1...

Wel kun je natuurlijk in je constructor de objecten uit je sessie controleren op aanwezigheid ofzo, maar een user object als parameter meegeven lijkt me onnodig.
 
Emmanuel Delay

Emmanuel Delay

13/11/2008 05:26:00
Quote Anchor link
Je kan zonder probleem twee dingen doen:

- een object meegeven als argument in een methode van een andere klasse.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$m_gebruiker
= new gebruiker();
...

$m_gastenboek = new gastenboek();
$m_gastenboek->setGebruiker($m_gebruiker);
...

class gastenboek
{
public $m_gebruiker;
public function __construct()
  {
  ...
  }

public function setGebruiker($m_gebruiker)
  {

  $this->m_gebruiker = $m_gebruiker;
  }
}

?>


- een object aanmaken binnen de klasse
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$m_gastenboek
= new gastenboek();
$m_gastenboek->setGebruiker();

class gastenboek
{
public $m_gebruiker;
public function __construct()
  {
  ...
  }

public function setGebruiker()
  {

  $this->m_gebruiker = new gebruiker();
  }
}

?>
 
Jelmer -

Jelmer -

13/11/2008 08:16:00
Quote Anchor link
Maar merk op dat wanneer je het tweede ding doet, je gastenboek onlosmakelijk koppelt aan de klasse gebruiker, waar je bij het eerste ding nog een klasse die "gebruiker" extend zou kunnen nemen.

Hetzelfde argument kan je tegen singleton & static methods gebruiken, en het is afhankelijk van hoeveel waarde je aan het hergebruiken van de losse klassen hecht hoe goed je dit argument vindt :)
 
Simon Blok

Simon Blok

13/11/2008 09:27:00
Quote Anchor link
Ik zit met een soortgelijk 'probleem'. Hoe net is het om het user-object binnen een hoofdclass onder te brengen? Dus stel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$hoofdklasse
= new Hoofdclasse();
$hoofdklasse->setUser();

$gastenboek = new Gastenboek();
?>

Binnen het gastenboekobject kun je dan je gebruiker oproepen met $hoofdklasse->gebruiker.
Beperking is wel dat de hoofdklasse moet bestaan als je het userobject wilt gebruiken.
 
Emmanuel Delay

Emmanuel Delay

13/11/2008 09:43:00
Quote Anchor link
Ik zie niet in waarom je alles in een hoofdklasse zou moeten steken.
 
Simon Blok

Simon Blok

13/11/2008 09:47:00
Quote Anchor link
In dit geval is het inderdaad niet persé nuttig. Maar in een groter systeem met meerdere klassen die het user-object nodig hebben is het misschien nuttig. Maar dat is nu dus juist even de vraag of dit wel slim is..
 
Yorian

Yorian

13/11/2008 13:25:00
Quote Anchor link
Saimen, waar jij het over hebt is in principe gewoon een register class, is in principe een veel voorkomende class. Ik gebruik hem zelf ook, maar is niet in alle gevallen ideaal. Wel handig voor het gebruik van settings over de hele site.
 
Simon Blok

Simon Blok

13/11/2008 13:38:00
Quote Anchor link
Ok, thx Yorian. Duidelijk antwoord. Is het ook slim om je database connectie in je registerclass op te slaan?
 
Yorian

Yorian

13/11/2008 13:41:00
Quote Anchor link
Ik heb ook mijn database connectie er in staan, die kan ik overal opvragen. Is in mijn ogen handig, het kan vast ook op een andere manier, maar deze werkt goed.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.