login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP OOP]Class Inheritance

Offline maigel - 28/01/2009 19:01 (laatste wijziging 28/01/2009 19:02)
Avatar van maigelPHP beginner Hey,
Ik ben momenteel een beetje met OOP PHP aan het rommelen.
Voor een framework te maken met het MVC pattern zou ik een controller nodig hebben die alles bestuurd.
Als ik nu deze code heb:
  1. <?php
  2.  
  3. class Controller
  4. {
  5. function index()
  6. {
  7. echo 'Test';
  8. }
  9. }
  10.  
  11. class DB extends Controller
  12. {
  13. function connect()
  14. {
  15. echo 'DB works';
  16. }
  17. }
  18.  
  19. class User extends Controller
  20. {
  21.  
  22. }
  23.  
  24. $controller = new User();
  25.  
  26. $controller->index();
  27. $controller->connect();
  28. ?>


Werkt $controller->index(); wel maar $controller->connect(); niet omdat DB controller extend en niet user, is er een manier om dit toch te laten werken zonder er class DB extends User van te maken?

10 antwoorden

Gesponsorde links
Offline tomie94 - 28/01/2009 19:05 (laatste wijziging 28/01/2009 19:06)
Avatar van tomie94 PHP interesse dit komt doordat de DB helemaal niet aangesproken wordt.

Dit werkt wel:
  1. <?php
  2. class DB
  3. {
  4. function connect()
  5. {
  6. echo 'DB works';
  7. }
  8. }
  9. class Controller extends DB
  10. {
  11. function index()
  12. {
  13. echo 'Test';
  14. }
  15. }
  16.  
  17.  
  18.  
  19. class User extends Controller
  20. {
  21.  
  22. }
  23.  
  24. $controller = new User();
  25.  
  26. $controller->index();
  27. $controller->connect();
  28. ?>

Offline maigel - 28/01/2009 19:07
Avatar van maigel PHP beginner ja oké, maar als ik nu in de klasse DB dingen nodig heb uit Controller zal dit ook niet werken hé, of wel?
Offline tomie94 - 28/01/2009 19:32 (laatste wijziging 28/01/2009 19:36)
Avatar van tomie94 PHP interesse wat je dan kunt doen is:
  1. <?php
  2.  
  3. class Controller
  4. {
  5. function index()
  6. {
  7. echo 'Test';
  8. }
  9. }
  10.  
  11. class DB
  12. {
  13. public $controller;
  14. function __construct($controller)
  15. {
  16. $this->controller = $controller;
  17. }
  18. function connect()
  19. {
  20. $this->controller->index();
  21. }
  22. }
  23.  
  24. class User extends Controller
  25. {
  26.  
  27. }
  28.  
  29. $controller = new User();
  30. $db = new DB($controller);
  31. $controller->index();
  32. $db->connect();
  33. ?>


ik weet niet zeker of dit werkt, ander moet je even kijken naar statics

ps: ik zie trouwens dat je OOP niet helemaal goed toepast, je moet eens kijken naar Protected, Public, Privated etc.
Offline Gerard - 28/01/2009 19:39
Avatar van Gerard Ouwe rakker Probeer gebruik te maken van een van de vele frameworks die er al zijn en ga daarmee aan de slag. Dan pas leer je het MVC even goed toe te passen. Hoe je zelf een technische realisatie maakt van een MVC implementatie kom daarna wel. Want dit is namelijk totaal niet hoe een controller gebruikt dient te worden.
Offline maigel - 28/01/2009 19:41
Avatar van maigel PHP beginner de reden dat ik zelf een zou wil maken in juist dat alle frameworks die ik gebruikt hebt niet volledig werken hoe ik het zou willen, en ze beginnen aan te passen is dan ook weer moeilijk
Offline tomie94 - 28/01/2009 19:44
Avatar van tomie94 PHP interesse dowload eens Zend Framework en kijk hoe hum gebruik maken van de MVC pattern.

Ook ben ik met de volgende wiki erg ver gekomen met het coden in MVC: PFZWIKI: FrontController
Offline Gerard - 28/01/2009 19:45
Avatar van Gerard Ouwe rakker De vraag die je je dan moet stellen is: doen deze frameworks niet wat ik wil omdat mijn denkwijze niet overeenkomt met de huidige design patterns, of werken duizenden programmeurs 'verkeerd'? 

Waarom voldoen frameworks als Zend Framework, CakePHP en CodeIgniter dan niet?

Blijft overigens nog over dat je het MVC design pattern niet goed toepast.
Offline nemesiskoen - 29/01/2009 00:10
Avatar van nemesiskoen Gouden medaille

PHP expert
DB klasse en een Controller klasse hebben niets met elkaar te maken. DB klasse kan je statisch maken (kan je die methodes overal aanroepen ) en je kan dan je tabellen gaan voorstellen in aparte klassen (al dan niet gegroepeerd) en deze aanroepen in je controllers. Want dit is... not done!
Offline Ibrahim - 29/01/2009 07:23
Avatar van Ibrahim PHP expert Waarom zou je database class het nodig moeten vinden om je controller object te gebruiken ?
Offline jvs - 29/01/2009 10:47
Avatar van jvs HTML beginner Het lijkt er inderdaad op dat je het MVC patroon nog niet geheeld doorhebt.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s