[php] OOP vraagje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Ik ben wat aan het stoeien met oop in php, maar heb toch nog een vraagje.

Ik bouw een heel systeem met verschillende classes. Alleen vraag ik me af hoe ik die classes moet opstarten. Moet je dit doen vanaf bijvoorbeeld een init file waar je alle classes aanroept? Of gebruiken we daar andere manieren voor. Met zo`n init file is het probleem dat je classes hebt die je maar bij een paar files gebruikt, en je start hem dan wel op ook al heb je hem niet nodig.

En dan nog iets:
Ik heb een class die bijvoorbeeld eerst de database class nodig heeft om iets te kunnen doen.
Wat is dan de meest logische manier om dat te doen? Moet je dan in de niet database class de database class aanroepen met bijv $xx = new db; ? Of is daar een mooiere oplossing voor?

Op phpfreakz heb ik aardig wat oop scriptjes doorgebladerd, maar daar gaat het steeds uit van 1 class, dus daar kan ik niet zoveel info aan ontrrekken ;)

Ik ben erg benieuwd

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • Nielsvr
  • Registratie: Maart 2004
  • Laatst online: 27-08 14:55
Je zou eens kunnen kijken naar de singleton methode :)

Acties:
  • 0 Henk 'm!

Verwijderd

8)7
Gewoon class-file includen en dan kun je hem initieren? Inderdaad met $db = new DB();

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik denk dat het handiger is dat je stopt met "OOP scriptjes doornemen" en je eerst even verdiept in het idee waarom je OOP zou gebruiken (en hoe het toe te passen komt dan vanzelf).

Gewoon OOP gebruiken omdat het "nieuw"/"hip"/whatever is zonder te weten waarom, of de basics te begrijpen (en dat mist nog zo te zien, gezien je het hebt over "classes opstarten") is gewoon zinloos.

[ Voor 10% gewijzigd door RobIII op 07-05-2009 10:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Nu online

TwoR

Gekleurde stippen

je kan kijken naar een autoloader. Dan hoef je je nooit meer zorgen te maken of de class al wel of niet geinclude is je kan ze altijd aanroepen.

Als je je database klasse een singelton maakt en function-chaining gebruikt kan je bijvoorbeeld op de volgende manier werken
PHP:
1
DB::getInstance()->query('SELECT * FROM `table`')


de class DB wordt via de autoloader geinclude. deze is singelton dus ik pak de huidige instance. En omdat ik function-chaining gebruik kan ik gelijk de functie query aanroepen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Als je met opstarten bedoelt dat de php-bestanden waar de klassen in gedeclareerd worden geladen moeten worden is deze link wel handig.

Op je tweede vraag kan ik slechts zeggen dat het niet handig is om telkens opnieuw een instantie van de databaseklasse aan te maken, hoewel je er een singleton van zou kunnen maken. Het maakt qua resources in PHP weinig uit, omdat de databaseverbinding toch gedeeld wordt: "If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned".

Het verstandigste is echter om één instantie van de databaseklasse aan te maken en een referentie hieraan aan de constructor van de klassen die hem gebruiken mee te geven, om die vervolgens in de klasse op te slaan.

offtopic:
En ik moet een typcursus nemen. Traaaaaag.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
@rob
Ik begrijp wel degelijk het principe van OOP en waarom het handig is (en ook wanneer niet)
En omdat ik toevallig ergens een andere naam aan geef ben ik een programmeur die 'hip' wil zijn?

Dat is toch wel erg kort door de bocht.

Maar goed, dan doe ik het wel net zoals boland. Ik dacht alleen dat dat een rare manier was ;) Maar ik zag net op deze tut http://www.killerphp.com/...ns_from_another_class.php dat hij dezelfde manier daar gebruikt. En over singletons ga ik mij nog eens inlezen ;)

Bedankt tot zover

@codecaster enzo.
Bedankt voor deze uitleg, hier ga ik zeker mee aan de slag!

[ Voor 7% gewijzigd door mazz op 07-05-2009 10:18 ]

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Je database-klasse een singleton maken zou ik afraden. Dat levert je problemen op wanneer je eens verbinding moeten maken met verschillende databases. De bedoeling van een singleton is ook niet om eenvoudig een resource te delen tussen verchillende objecten. Daarvoor kun je imho beter een eenvoudige implementatie van het registry pattern gebruiken...

Daarnaast vroeg TS volgens mij hoe je eenvoudig de juiste script files met klassedefinities kunt includen. Daar kent PHP autoload functionaliteit voor.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Je zou je eens in de verschillende oplossingen voor 'dependency management' kunnen verdiepen. Goegel eens naar 'Service Locator', 'Dependency Injection', en nog wat van dat soort powertermen.

Singleton zal, bij goede dependency management, nooit nodig hoeven zijn - aangezien je in veel gevallen óf een 'service locator' object hebt die een enkele referentie naar je DB connectie object heeft, óf al je classes hebben zelf al een reference naar eenzelfde object dmv dependency injection.

Nu is dependency injection overigens minder geschikt voor PHP, omdat je moeilijk na kunt gaan welke objecten welke dependencies nodig hebben aan het begin van elk request. Voor applicaties die gewoon in het geheugen blijven staan (java/c#/c++/vrienden) is het echter beter geschikt, omdat je zo je app op kunt bouwen alsof het lego is.

Maar in ieder geval, Google eens om dependency management, en niet beslist in combinatie met PHP aangezien er zoveel goedkope en/of beperkte voorbeelden zijn voor PHP scripts.
Pagina: 1