[PHP] single instance van een class

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
ahum, wat ik dus bedoel:

Ik heb een aantal klassen: A, B, C (uiteraard even als voorbeeld :) )
A maakt een instantie van B. C maakt een instantie van A.
Nu is het de bedoeling dat alleen A een instantie van B kan maken en dat dat dus niet lukt voor klasse D.

De bedoeling is dus dat maar 1 class een instantie van de class kan maken. Ik heb nu wel iets (even aan het verhaal aangepast) :

PHP:
1
2
3
4
5
6
7
8
if(!in_array('B', get_declared_classes()))
{
    require_once('B');
    $this->_B = new B();
}else{
    echo 'oeps, dat mag niet';
    exit();
}


maar dat maakt het nog steeds mogelijk dat D een instantie van B kan maken :(

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Ik neem aan dat je dit wil doen zodat je een error kan opwerpen tijdens het testen van je app, waardoor dit dus debug info is. Waarom let je niet gewoon op wat je programmeert? Je gaat in een class om fietsen in op te slaan toch geen object instantiëren voor het lievelingseten van 65+ers? (Zomaar even een maf voorbeeldje. :P)
Als je je classes doorzichtig houdt is die hele check overbodig denk ik. :)

'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!

Verwijderd

kan je B niet gewoon een geneste private class maken van A

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op 17 juli 2004 @ 10:31:
kan je B niet gewoon een geneste private class maken van A
PHP ondersteund geen geneste classes

Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
NMe84 schreef op 17 juli 2004 @ 01:27:
Ik neem aan dat je dit wil doen zodat je een error kan opwerpen tijdens het testen van je app, waardoor dit dus debug info is. Waarom let je niet gewoon op wat je programmeert? Je gaat in een class om fietsen in op te slaan toch geen object instantiëren voor het lievelingseten van 65+ers? (Zomaar even een maf voorbeeldje. :P)
Als je je classes doorzichtig houdt is die hele check overbodig denk ik. :)
Nou het gat dus niet om te debuggen. Het moet mogelijk zijn dat iemand anders het systeem kan uitbreiden (modulair) maar van klasse B mag dus geen instantie worden gemaakt (behalve door A). Dus iemand anders mag daar dus niets mee, die moet dat via klasse A spelen :)

Verder is het OO in php4 niet echt denderend dat je oa van private classes gebruik kunt maken

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

TheRebell schreef op 17 juli 2004 @ 12:05:
[...]


Nou het gat dus niet om te debuggen. Het moet mogelijk zijn dat iemand anders het systeem kan uitbreiden (modulair) maar van klasse B mag dus geen instantie worden gemaakt (behalve door A). Dus iemand anders mag daar dus niets mee, die moet dat via klasse A spelen :)
Dan schrijf je in de documentatie van klasse B dat deze alleen via klasse A gebruikt en gemaakt mag worden. Documentatie is bij elk project van belang, ook hier. En als je geen fysieke documentatie wil maken dan voldoet een simpele regel als:
PHP:
1
2
3
//Deze klasse mag alleen geïnstantieerd worden door de klasse A!
class b {
//enz


Bij mijn weten kun je een class in PHP niet op de manier die jij wil restricten.

'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.

Pagina: 1