[php] Overerven van functies uit andere classen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben aan het proberen om eens een website in oop te maken helaas lukt het niet zo.

Foutmelding:
Notice: Undefined variable: test in J:\UsbWebserver\Root\test.php on line 18
Fatal error: Call to a member function test() on a non-object in J:\UsbWebserver\Root\test.php on line 18

Wat ik wil bereiken:
Hoe kan ik wat van de eerste class gebruiken zonder hem te extenden?
Stel test is een database class en ik heb nog 3 andere classes die gebruik maken van test echter deze 3 classes moeten onderling ook functies 'uitwisselen' Hoe krijg je zoiets voor elkaar?

code:
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
<?php

class test{
    
    public function __construct(){
        $test2 = new test2;
    }
    
    public function test(){
        echo 'test';
    }
    
}

class test2{
    
    public function test2(){
        $test->test();
    }

}

$test = new test;

?>

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Op regel 18 van je voorbeeld code gebruik je een variabele $test die je nergens gedefinieerd hebt. Je zult dus moeten zorgen $test een verwijzing naar een instance van test wijst.

edit:
Ik zie dat je eronder wel een $test instantieerd. Deze kun je echter niet in je methode gebruiken omdat hij niet in die scope zit. Om dit wel voor elkaar te krijgen kun je naar het global keyword kijken.

Echter is het beter om bij het instantieren van Test2 gewoon een refference mee te geven naar de gewenste Test

[ Voor 47% gewijzigd door Woy op 04-03-2009 14:56 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:18
je weet dat een functie met dezelfde naam als de class wordt gezien als een constructor?

En als je die klasse wil gebruiken moet je hem instantieren, dat heb je nu niet gedaan. Ik denk dat je even een goeie tutorial mbt oOP moet doorlezen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik begreep de fout ook maar het was een probeersel (wil aantonen dat ik heb geprobeerd meermaals zelfs) een oplossing te vinden voor dit:
Hoe kan ik wat van de eerste class gebruiken zonder hem te extenden?
Stel test is een database class en ik heb nog 3 andere classes die gebruik maken van test echter deze 3 classes moeten onderling ook functies 'uitwisselen' Hoe krijg je zoiets voor elkaar?

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 18-09 19:18
Verwijderd schreef op woensdag 04 maart 2009 @ 14:52:
Stel test is een database class en ik heb nog 3 andere classes die gebruik maken van test echter deze 3 classes moeten onderling ook functies 'uitwisselen' Hoe krijg je zoiets voor elkaar? Hoe krijg je zoiets voor elkaar?
Door gebruik te maken van statische klassen (In PHP een klasse met statische functies) of het Singleton pattern.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
418O2 schreef op woensdag 04 maart 2009 @ 14:56:
je weet dat een functie met dezelfde naam als de class wordt gezien als een constructor?
Is dat in php ook het geval? Ik dacht dat ze daar iets van een __construct() method hadden.
dev10 schreef op woensdag 04 maart 2009 @ 14:57:
[...]


Door gebruik te maken van statische klassen (In PHP een klasse met statische functies) of het Singleton pattern.
Hoezo moet het dan weer static, of singleton zijn? Wat dan als je opeens 2 verschillende databases hebt, waar je tegelijkertijd wat mee wilt doen?

[ Voor 91% gewijzigd door Woy op 04-03-2009 15:02 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 24-08 06:41
Singleton en statisch zijn nu niet direct triviaal voor een starter met OOP. Het gebruik maken van een variabele van het type test is dan een suk eenvoudiger.

Better to remain silent and be thought a fool then to speak out and remove all doubt.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Als je in de aanroep van klasse 1 een instantie maakt van klasse 2, die tijdens die aanroep een instantie maakt van klasse 1, die tijdens die aanroep een instantie maakt van klasse 2, die tijdens die aanroep een instantie maakt van klasse 1, die tijdens die aanroep een instantie maakt van klasse 2, die tijdens die aanroep een instantie maakt van klasse 1, die tijdens die aanroep een instantie maakt van klasse 2, die tijdens die aanroep een instantie maakt van klasse 1, die tijdens die aanroep een instantie maakt van klasse 2, die tijdens die aanroep een instantie maakt van klasse 1, die tijdens die aanr... BOEM - out of memory.

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:18
Woy schreef op woensdag 04 maart 2009 @ 14:57:
[...]

Is dat in php ook het geval? Ik dacht dat ze daar iets van een __construct() method hadden.
O. Zit teveel in C# denk ik, ik weet niet of dat zo is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zoek dus een manier om zowel classe 1 als classe 2 als classe 3 met elkaar te laten 'communiceren' zodat i
classe 1 extends classe 2 en classe 2 extends 3 is geen oplossing want classe 1 moet ook met 3 kunnen 'communiceren'

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 15:01:
Ik zoek dus een manier om zowel classe 1 als classe 2 als classe 3 met elkaar te laten 'communiceren' zodat i
classe 1 extends classe 2 en classe 2 extends 3 is geen oplossing want classe 1 moet ook met 3 kunnen 'communiceren'
Als je dat nodig hebt, dan moet je het design van je applicatie heroverwegen.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Database
{
    function DoSome(){ }
}

class DataAdapter
{
    private $database;

    function __construct( $database ) { $this->databse = $database; }

   function MyTest() { $database->DoSome(); }
}

$myDB = new Database();
$myDataAdapter = new DataAdapter( $myDB );
$myDataAdapter->MyTest();


Ik weet even niet of ik exact de juiste syntax heb ( Waarschijnlijk niet ), maar op zo'n manier kun je in class B methods gebruiken van class A

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zo deed ik het vroeger inderdaad maar is dit de correcte wijze?

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Volgens mij heb je het concept van OOP nog niet echt begrepen. Als ik je verhaal lees, bedoel je dit te doen, zonder gebruik te hoeven maken van extend:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class test{
    public function testMethod(){
        echo 'test';
    }
    
}

class test2 extends test{
    public function test2Method(){
        $this->testMethod();
    }

}

$test = new test;
$test->test2Method();


Het kan ook zijn dat je iets anders bedoelt, maar je verhaal en je code hangt van onduidelijkheid aan elkaar. Bijvoorbeeld:
- Je gebruikt in één klasse de functie __construct() en een functie met dezelfde naam als de klasse. In PHP4 is de functie met de naam van de klasse de constructor, je introduceert dus een ambiguïteit.
- Je gebruikt op regel 18 een variabele die nergens wordt aangemaakt. Daar komt ook je foutmelding vandaan, die overigens duidelijk zegt wàt er fout gaat.

Je zegt dat je iets van de eerste klasse wilt gebruiken zonder hem te extenden. Dat kan in principe niet, tenzij je de eerste klasse of de functie statisch maakt. Je kunt ook een instantie van die klasse doorgeven als argument bij een methode of in de constructor.

Ik bedoel dus dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
class testA{
  static public methodA(){
    //doe iets
  }
}

class testB{
  public methodB{
    testA::methodA();
  }
}


edit: sneller typen, dacht dat ik de eerste was :(

De oplossing van Woy is wat ik als tweede optie noemde.

[ Voor 4% gewijzigd door doeternietoe op 04-03-2009 15:13 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat is er niet correct aan?

Als je bijvoorbeeld een soort Utility class hebt, die voor de rest geen state heeft, zou je ook gewoon een class met allemaal static functions kunnen maken, dan hoef je niet perse een refference te hebben.

Maar als je database class wel state heeft, dan zou ik er toch voor kiezen om alle classes die er gebruik van maken gewoon een refference naar de juiste instantie te geven. Dan kun je later eventueel de classes nog hergebruiken voor meerdere connections/databases

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dus als ik nu mijn database class en mijn ledensysteem class static maak kan mijn fotosysteem en nieuwssysteem beiden aan de database class en ledensysteem class?

@Woy:
Maar als je database class wel state heeft
Wat is state?

[ Voor 20% gewijzigd door Verwijderd op 04-03-2009 15:10 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Ik had het verhaal eerst anders begrepen en daar kwam het zinnetje vandaan :P Static classes is inderdaad een werkwijze. Maar volgens mij was de TS meer op weg naar circular dependencies

Ik bedenk trouwens dat je voor het geval van die database wat je noemt ook een singleton kunt gebruiken. Of zit ik dan op een verkeerd spoor :p ?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dat is dat je class tussen de verschillende functie calls gegevens "onthoud". En dus afhankelijk is van de Staat van het object. ( Open/Closed/Etc. )

Stel je hebt een Connection class, dan doe je vaak iets dergelijks

PHP:
1
2
3
4
5
6
$connection = new Connection( $connectionstring );
$connection->Open();

$connection->ExecuteQuery();

$connection->Close();


De connection class houd hier intern bij wat zijn connectionstring is, en als de connection geopend is houd hij een verwijzing naar de open connectie bij.

Bij een static class zou je ook iets dergelijks kunnen doen, echter is het dan niet mogenlijk om 2 verschillende connecties tegelijkertijd te open.
doeternietoe schreef op woensdag 04 maart 2009 @ 15:12:
[...]

Ik had het verhaal eerst anders begrepen en daar kwam het zinnetje vandaan :P Static classes is inderdaad een werkwijze.
Ik reageerde eigenlijk op de TS, jouw reactie stond er nog niet ;)
Ik bedenk trouwens dat je voor het geval van die database wat je noemt ook een singleton kunt gebruiken. Of zit ik dan op een verkeerd spoor :p ?
Het kan wel, maar ik zie niet in waarom je dat hier zou willen. Als het echt alleen Utility functions zijn dan kan je ze static maken, maar anders is het flexibeler om gewoon instances te gebruiken.

[ Voor 33% gewijzigd door Woy op 04-03-2009 15:21 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 15:10:
Dus als ik nu mijn database class en mijn ledensysteem class static maak kan mijn fotosysteem en nieuwssysteem beiden aan de database class en ledensysteem class?
Ik denk dat je zoiets wilt:
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
26
27
28
29
30
31
32
33
34
35
class Database {
  private $_db;

  public function __construct() {
    $this->_db = new mysqli(...);
  }

  public function query($statement) {
    return $this->_db->query($statement);
  }
}
// -----
class FotoSysteem {
  private $_db;

  public function __construct() {
    $this->_db = new Database();
  }

  public function getFoto($id) {
    return $this->_db->query('SELECT * FROM foto WHERE id = '. (int)$id);
  }
}
// -----
class LedenSysteem {
  private $_db;

  public function __construct() {
    $this->_db = new Database();
  }

  public function getLid($id) {
    return $this->_db->query('SELECT * FROM leden WHERE id = '. (int)$id);
  }
}

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja, handig, laat elk object z'n eigen database instantie aanmaken 8)7. Geef de instantie gewoon mee in de constructors van elke class die het ding nodig heeft.

[ Voor 52% gewijzigd door .oisyn op 04-03-2009 15:31 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd, als ze toch allemaal op dezelfde database werken kun je beter 1 instantie maken en die mee geven aan de verschillende componenten die er gebruik van maken.

Dat is ook meteen flexibeler als je straks bijvoorbeeld 2 FotoAlbums wilt tonen die uit verschillende databases komen.

[ Voor 27% gewijzigd door Woy op 04-03-2009 15:32 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
.oisyn schreef op woensdag 04 maart 2009 @ 15:29:
Waarom moet elk object in hemelsnaam z'n eigen database instantie hebben? Geef de instantie gewoon mee in de constructors van elke class die het ding nodig heeft.
Het gaat om de essentie: hoe bereik je vanuit de ene klasse functies in de andere klasse op een logische manier.

Van een database heb je inderdaad waarschijnlijk maar één klasse nodig, die je kunt aanmaken en doorgeven in de constructor van de klasse. Essentie blijft hetzelfde: je kunt vanuit de ene klasse functies in de andere aanroepen. Daar ging het mij om en volgens mij is dat hetgene wat dema66 niet snapt. Of je een nieuwe instantie maakt of een bestaande hergebruikt doet daar niets aan af.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe kun je instantie meegeven?

@HuHU
Lijkt me beter dat ik niet tevaak connect/close liever 1 maal connecten en closen

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

.oisyn schreef op woensdag 04 maart 2009 @ 15:29:
Ja, handig, laat elk object z'n eigen database instantie aanmaken 8)7. Geef de instantie gewoon mee in de constructors van elke class die het ding nodig heeft.
Dan lijkt een singleton me praktischer. Zelfs een global lijkt me hiervoor wel gerechtvaardigd. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 15:36:
Hoe kun je instantie meegeven?

@HuHU
Lijkt me beter dat ik niet tevaak connect/close liever 1 maal connecten en closen
Als je terugleest kun je het voorbeeld van Woy nog eens bekijken, die doet dat: Woy in "[php] OOP"

En ja, dat snap ik. Ging om het voorbeeld hè, performance-neuken doen we wel als je het snapt.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Sorry maar als je dat nog niet weet, is het mischien beter om eens een goed boek over OOP en PHP te kopen, want dat is echt wel de basis.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok denk inderdaad dat dit mijn oplossing zal wezen :) [url="Woy in "[php] Overerven van functies uit andere ...""]

Bedankt allemaal!

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
NMe schreef op woensdag 04 maart 2009 @ 15:37:
[...]

Dan lijkt een singleton me praktischer. Zelfs een global lijkt me hiervoor wel gerechtvaardigd. :P
Singleton hoeft niet praktischer te zijn, scenario's waarbij je meer dan één database hebt zijn eenvoudig te bedenken. Globaal je database(s) bijhouden is beter, singleton zou in dit geval alleen maar een truucje zijn indien je te lui bent om de referentie naar de database-klasse goed te bewaren.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 15:40:
Ok denk inderdaad dat dit mijn oplossing zal wezen :) \[url="Woy in "[php] Overerven van functies uit andere ...""]

Bedankt allemaal!
Als dat je oplossing is, dan spreek je jezelf hier nogal tegen:
Verwijderd schreef op woensdag 04 maart 2009 @ 15:01:
Ik zoek dus een manier om zowel classe 1 als classe 2 als classe 3 met elkaar te laten 'communiceren' zodat i
classe 1 extends classe 2 en classe 2 extends 3 is geen oplossing want classe 1 moet ook met 3 kunnen 'communiceren'
In het geval van Woy is er sprake van éénweg-communicatie. De DatabaseAdapter (klasse 1) kan Database (klasse 2) aanroepen, maar niet andersom. Vandaar deze post van mij:
HuHu schreef op woensdag 04 maart 2009 @ 15:02:
[...]

Als je dat nodig hebt, dan moet je het design van je applicatie heroverwegen.
Want dat de Database de DatabaseAdapter gaat aanroepen zou nogal vreemd zijn, dan is er iets mis met je ontwerp.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
HuHu schreef op woensdag 04 maart 2009 @ 15:40:
[...]

Singleton hoeft niet praktischer te zijn, scenario's waarbij je meer dan één database hebt zijn eenvoudig te bedenken. Globaal je database(s) bijhouden is beter, singleton zou in dit geval alleen maar een truucje zijn indien je te lui bent om de referentie naar de database-klasse goed te bewaren.
[/sarcasm]
Ik zal anders zijn sarcasme tag even afsluiten :P

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
HuHu schreef op woensdag 04 maart 2009 @ 15:40:
[...]

Singleton hoeft niet praktischer te zijn, scenario's waarbij je meer dan één database hebt zijn eenvoudig te bedenken. Globaal je database(s) bijhouden is beter, singleton zou in dit geval alleen maar een truucje zijn indien je te lui bent om de referentie naar de database-klasse goed te bewaren.
Singleton is dan wel netter en beter onderhoudbaar. Als je op globals overstapt en dan ook nog twee verschillende databases wilt gebruiken dan wordt het mijns inziens wel erg onoverzichtelijk. En ga maar eens aan een stuk of 20 klassen in de constructor instanties van één van de twee database klassen doorgeven. Of dat praktisch is :?

In principe kun je singleton ook als een verkapte manier van globals gebruiken, maarja als dat makkelijker is ...

[ Voor 7% gewijzigd door doeternietoe op 04-03-2009 15:49 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
En een Singleton is dan beter omdat :?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Woy schreef op woensdag 04 maart 2009 @ 15:50:
En een Singleton is dan beter omdat :?
... je niet per ongeluk je global kan overschrijven :+

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Woy schreef op woensdag 04 maart 2009 @ 15:44:

[...]

[/sarcasm]
Ik zal anders zijn sarcasme tag even afsluiten :P
Was ik al klaar dan ;)?
doeternietoe schreef op woensdag 04 maart 2009 @ 15:47:
[...]

Singleton is dan wel netter en beter onderhoudbaar. Als je op globals overstapt en dan ook nog twee verschillende databases wilt gebruiken dan wordt het mijns inziens wel erg onoverzichtelijk. En ga maar eens aan een stuk of 20 klassen in de constructor instanties van één van de twee database klassen doorgeven. Of dat praktisch is :?

In principe kun je singleton ook als een verkapte manier van globals gebruiken, maarja als dat makkelijker is ...
Netter is een kwestie van smaak. Als je Singleton gaat gebruiken omdat je niet weet waar je een globale referentie kwijt moet en dus maar terugvalt op een Singleton - want dat is makkelijker - is er dus iets mis met je structuur. Dat vind ik niet netjes.

Als je daarnaast meerdere databases gaat gebruiken, dan kun je dus niet eens een Singleton gebruiken. En je gaat natuurlijk nooit 20 referenties, allemaal naar databases, meegeven in een constructor, daar hebben ze een truucje voor bedacht: een array.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
doeternietoe schreef op woensdag 04 maart 2009 @ 15:51:
[...]

... je niet per ongeluk je global kan overschrijven :+
Volgens mij is dat in PHP geen probleem om per ongeluk je private static variabele die je Singleton instance bevat te overschijven, maar dat even terzijde.

Of je nu een global of een Singleton gebruikt, je introduceert in beide gevallen afhankelijkheid van global state, en daarmee maak je het lastiger voor jezelf als je straks uit verschillende databases dingen wilt gaan doen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is dit eigenlijk een mogelijkheid?

code:
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
<?php

class test{
    
    public function __construct(){
        $test2 = new test2;
    }
    
    public function testen(){
        echo 'test';
    }
    
}

class test2{
    
    public function test2(){
        TEST::testen();
    }

}

define('TEST', new test);

?>

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 15:59:
Is dit eigenlijk een mogelijkheid?

code:
1
2
3
4
5
<?php

-

?>
Volgens mij is eerder een antwoord op de achterliggende vraag benodigd: waarom wil je zoiets doen? Als je dit soort gekke constructies nodig hebt, dan is er gewoon iets mis.

[ Voor 24% gewijzigd door HuHu op 04-03-2009 16:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zodat je geen gebruik van references hebt niet?

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 16:03:
zodat je geen gebruik van references hebt niet?
Nee... niet in termen van code denken. Welk probleem wil je oplossen? Wat wil je doen in je applicatie? Want volgens mij zit er een raar hersenspinsel in je ontwerp of idee, waardoor je dit soort gekke dingen nodig hebt. Dus heel simpel: wat wil je doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb ondertussen ondervonden dat hetgene wat ik uitlegde inderdaad niet 100% klopt met hetgene wat de app moet doen

class 1 (database) moet inderdaad niet communiceren met andere wel andere met hem.

Dus in principe krijg ik alles nu netjes voor elkaar met references.

database
ledensysteem (met reference van database)
fotosysteem (met reference van database en ledensysteem)
eventen systeem (met reference van database en ledensysteem)
comment systeem (met references van database, ledensysteem, fotosysteem,..)

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Waarom hebben je foto-, eventen- en comment-systeem een referentie naar ledensysteem? En waarom heeft comment-systeem ook nog een referentie naar fotosysteem?

[ Voor 30% gewijzigd door HuHu op 04-03-2009 16:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waarom hebben je foto-, eventen- en comment-systeem een referentie naar ledensysteem? En waarom heeft comment-systeem ook nog een referentie naar fotosysteem?
foto's van een bepaald lid op te halen moet je het id van dat lid kunnen ophalen via ledensysteem etc
als je comment geeft moet je toch weten op wie je comment en die persoon een waarschuwing sturen dat er gecomment is. EN met fotosysteem omdat je kan commenten op foto's en je wil weten op welke foto er gecomment word.

[ Voor 38% gewijzigd door Verwijderd op 04-03-2009 16:21 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dan lijkt me dat je ondertussen al genoeg informatie in dit topic hebt gehad. Als je het aan de hand van deze informatie niet snapt zou ik eens een goed Boek kopen en die goed bestuderen, want hetgeen je nu vraagt behoort wel tot de basis van PHP.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Stel ik dan zo dwaze vraag? OOP is nieuw php normaal gezien niet hoor heb ik enkele boeken al van liggen...

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 16:16:
foto's van een bepaald lid op te halen moet je het id van dat lid kunnen ophalen via ledensysteem etc
als je comment geeft moet je toch weten op wie je comment en die persoon een waarschuwing sturen dat er gecomment is
Ja, maar daarvoor hoef je geen referentie naar het ledensysteem te hebben. Ik neem aan dat je bij elke foto opslaat van welk lid die is, dus als je dan z'n naam wil weten doe je gewoon dit:

PHP:
1
2
3
4
$lidId = $foto->getLidId();
$lid = new Lid();
$lid->getLid($lidId);
echo $lid->naam;


Heb je nergens een referentie naar een ledensysteem voor nodig.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Woy schreef op woensdag 04 maart 2009 @ 16:16:
Dan lijkt me dat je ondertussen al genoeg informatie in dit topic hebt gehad. Als je het aan de hand van deze informatie niet snapt zou ik eens een goed Boek kopen en die goed bestuderen, want hetgeen je nu vraagt behoort wel tot de basis van PHP.
Het behoort niet tot de basis van PHP, de taal is slechts bijzaak in dit geval lijkt mij. Dema66 snapt volgens mij nog niet helemaal hoe je een goed object-geörienteerd systeem in elkaar zet. Dat is taal-onafhankelijk. PHP is in deze slechts een middel om tot het doel te komen, maar het probleem is dat het doel nog niet goed vastligt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb nog nooit eerder OOP geprogrammeerd in daar zit het probleem dat weet ik :)

"new Lid();" Dus zou ik mijn ledensysteem in enkele classes moeten opdelen? en een stukje ervan initieren? ipv de hele klas dmv referentie door te geven?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je de basics van OOP niet snapt zou je daar ook een boek voor kunnen kopen. Dat is inderdaad niet taal-afhankelijk.

Op zich stel je geen dwaze vraag, maar het is wel heel erg basic wat OOP betreft. Mocht je echt design problemen hebben en daar over wilt discussieren, dan kun je het best een topic openen in Software Engineering & Architecture. Maar daar word ook wel verwacht dat je de basis van OOP al een beetje onder de knie hebt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op woensdag 04 maart 2009 @ 16:26:
Heb nog nooit eerder OOP geprogrammeerd in daar zit het probleem dat weet ik :)

"new Lid();" Dus zou ik mijn ledensysteem in enkele classes moeten opdelen? en een stukje ervan initieren? ipv de hele klas dmv referentie door te geven?
Jep, je moet denken in object hè. Je hebt leden, dus maak je in ieder geval een object Lid. Daarnaast heb je foto's: dus een object Foto. Ze zitten in een database: object Database. Zo ga je door, alle basis-onderdelen van je systeem zet je om naar een object.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dus maak vb ledensysteem met functies aanmelden, uitloggen, getid etc...
En fotosysteem met getfoto etc

Misschien best in weekend eens voor een boek gaan kijken

[ Voor 22% gewijzigd door Verwijderd op 04-03-2009 16:34 ]

Pagina: 1