Beste

Ik ben bezig met een website waarbij ik aardig gebruik maak van OOP. Daarbij heb ik nu het probleem dat ik een bepaalde class in een andere class moet gebruiken. Ik wil niet opnieuw een object aanmaken omdat ik dan weer een 'leeg' object heb. Ik wil namelijk een bestaand object (die aangemaakt is buiten de class) gebruiken in een class.

Voorbeeldje om het wat te verduidelijken


class class1 {
     private $data;

     function functie1($data) {
          $this->date = $data;
     }
}

$class1 = new class1;

class class2 {
     function functie2($data) {
          return $class1->functie1($data);
     }
}


Ik weet nu al bijna zeker dat het op bovenstaande manier niet zal werken. Weet er toevallig iemand hoe je dit kan oplossen?

Bedankt alvast!

[size=xsmall]Toevoeging op 23/12/2012 22:33:36:[/size]

Ik heb net iets gevonden waarmee ik het zou kunnen proberen. Met de singleton patern. Iemand die weet of dat goed en veilig is?
Vuistregel (die ik aanhoud): als een class geen enkele functionaliteit kan bieden als een ander object niet beschikbaar is, dan geef ik die daar waar mogelijk mee in de constructor. Bij een database class dus, als je geen configuratie hebt, kan je geen connectie maken en geen query uitvoeren. In dat geval is het dus zinvol om het configuratie object mee te geven in de constructor.
Voor je user class, die user class kan vast ook nog wel dingen zonder dat er een database connectie is. Het meegeven van het database object in de constructor is dan dus geen noodzaak en dus geen goed idee.

Bedenk dat als je een object mee moet geven in de constructor, je die class niet meer kunt aanmaken als dat mee te geven object niet beschikbaar is. Als je dus iets kan zonder dat object, is het verstandig die afhankelijkheid niet te sterk te maken.
Je kan natuurlijk ook een default NULL of false aan het constructor meegeven, dan kan in je het object altijd nog de db class initiëren mocht je hem nodig hebben
Ik denk dat ik het dus maar houdt bij het doorsturen van de database class naar de user class enz.

Voorbeeld:

<?php
$db = new mysql($host, $user, $pass, $database);
$user = new user($db);
?>


Ik denk dat dit gewoon de meest simpele en veilige manier is. Je geeft alleen het object mee als je dat wil.

Nogmaals heel erg bedankt aan iedereen die me geholpen heeft!

Reageren