[php] beste manier om classes in andere classes te gebruiken

Pagina: 1
Acties:
  • 186 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Ik vraag me nog steeds een beetje af hoe ik het beste classen in andere classen kan gebruiken.

Nu doe ik het alsvolgt:

include('object1.php');
include('object2.php');

$obj1 = new Object1;
$obj2 = new Object2;

$obj2->functie();

En dan:

class Object2
{
function functie()
{
global $obj1;

return $obj1->functie();
}

}


Dit doe ik zo omdat ik dan (vrij eenvoudig $obj1 kan veranderen van naam bijv (hoeft alleen in de new statement). Ook hoef ik geen dingen te includen die ik niet gebruiken. Toch heb ik het gevoel dat het beter kan. Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Isengrim
  • Registratie: Februari 2004
  • Laatst online: 16:29
class 2 extends class 1 misschien

Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
Inderdaad gewoon extends gebruiken...
PHP:
1
class Object2 extends Object1 {}

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Hmm dat vind ik dus niet handig.

Als ik een class Object1 in object1.php heb en class Object2 in object2.php heb dan moet ik dus realtime extenden ofzo...

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Of met een singleton:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function getObj1()
{
 static $instance;
 if (is_null($instance)) {
  $instance = new object1();
 } 
 return $instance;
}

class object1
{
 function andereFunctie()
 {
  $this->AllHailSkaah();   
 }
}

class object2
{
 function functie()
 {
  $obj1 =& getObj1();
  $obj1->andereFunctie();
 }
}

edit:
Waarom heb ik nou weer geen syntaxhighlighting?

[ Voor 31% gewijzigd door Skaah op 16-02-2005 18:29 . Reden: Wel, niet, wel niet, crisp? ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Of met containment:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
class Object1 {
    function functie() {
        echo "bar";
    }
}

class Object2 {
    
    var $object1;
    
    function Object2(& $object1) {
        $this->object1 = $object1;
    }
    
    function functie() {
        echo "foo";
        $this->object1->functie();
    }
}

$object1 = new Object1();
$object2 = new Object2($object1);
$object2->functie();
?>

[ Voor 26% gewijzigd door moto-moi op 16-02-2005 20:14 . Reden: ? waarom hij wel en ik niet syntax highlighting!!1 ;) ]


Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
chielsen schreef op woensdag 16 februari 2005 @ 18:25:
Hmm dat vind ik dus niet handig.

Als ik een class Object1 in object1.php heb en class Object2 in object2.php heb dan moet ik dus realtime extenden ofzo...
Huh :? Wat bedoel je met realtime extenden? Je kan toch gewoon die twee files includen of bij Object2 die Object1 extend een include_once oid opnemen :?

Verwijderd

Gebruik includes en requires zoals je ze in C++ of Java zou gebruiken bij afhankelijke classes. Eigenlijk: deel je project in zoals je dat in iets als een pakket als VC++ zou doen. Scheid class definitie van class gebruik. En gebruik include guards (include_once of require_once).

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Ja das opzich wel netter, ik dacht er zelf al over om het zo te doen.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Volgens OO princiepes moet je aggregatie boven overerving verkiezen. Pas als je echt met polymorfisme te maken krijgt kun je beter overerven. Ik zou in dit geval gewoon kijken wat de relatie tussen de twee is. Als Object2 een Object1 is, dan moet je eigenlijk altijd wel overerven. Als Object1 een eigenschap van Object2 is, of als Object2 gewoon puur gebruik maakt van Object1, dan moet je aggregeren. Ik hoop dat je een beetje snapt wat ik bedoel, ik weet niet of je de termen allemaal kent. Anders wil ik ze wel even toelichten.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Michali schreef op zaterdag 19 februari 2005 @ 12:01:
Volgens OO princiepes moet je aggregatie boven overerving verkiezen. Pas als je echt met polymorfisme te maken krijgt kun je beter overerven. Ik zou in dit geval gewoon kijken wat de relatie tussen de twee is. Als Object2 een Object1 is, dan moet je eigenlijk altijd wel overerven. Als Object1 een eigenschap van Object2 is, of als Object2 gewoon puur gebruik maakt van Object1, dan moet je aggregeren. Ik hoop dat je een beetje snapt wat ik bedoel, ik weet niet of je de termen allemaal kent. Anders wil ik ze wel even toelichten.
ehm..,is dat "aggregeren" dan mijn voorbeeldje? ik dacht dat dat "containment" heette, maar eerlijk gezegd was dat maar een gokje. ben meer praktisch met OO bezig dan theoretisch :)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Genoil schreef op zaterdag 19 februari 2005 @ 12:51:
[...]


ehm..,is dat "aggregeren" dan mijn voorbeeldje? ik dacht dat dat "containment" heette, maar eerlijk gezegd was dat maar een gokje. ben meer praktisch met OO bezig dan theoretisch :)
Dat is aggregeren ja. Maar dat is idd containment, dus wat je het fijnst vindt. Pas als je echt een discussie over relaties hebt is het belangrijk om het verschil tussen aggregatie en compositie te weten. Maar het boeit verder niet veel.

[ Voor 3% gewijzigd door Michali op 19-02-2005 12:53 ]

Noushka's Magnificent Dream | Unity

Pagina: 1