login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met includen (Opgelost)

Offline Raze - 17/07/2009 11:10 (laatste wijziging 17/07/2009 11:11)
Avatar van RazePHP beginner Hallo,

Ik ben aan het oefenen met klassen, maar heb een klein probleempje met het includen.
Ik heb één hoofdklasse (main), die o.a. de database-verbinding opzet.
De andere klassen zijn allemaal 'extended' (dus ... extends main), zodat ik in maar 1 klasse de databaseverbinding moet instellen etc.

De hoofdklasse staat in een andere map dan de subklassen (deze staan ook nog eens in verschillende mappen).
Bij elke subklasse doe ik dan include_once('main/main.class.php');, eventueel met de nodige ../../ ... .Dit werkt vlotjes, maar:
ik heb een klasse (login) waarmee ik controleer of de gebruiker is ingelogd.
Probleem is nu:
de pagina login.class.php (login extends main) bevindt zich in de map 'login'. een overzicht van de mapstructuur is

  1. /www/
  2. login/
  3. login.class.php
  4. main/
  5. main.class.php
  6. files/
  7. index.php
  8. files_2/
  9. file.php


dus om 'main' te includen in 'login' zou ik moeten doen: include_once('../main/main.class.php');

wanneer ik nu de klasse login gebruik op de pagina index.php (in de map files), werkt dit nog, aangezien het path naar main voor deze pagina hetzelfde is als voor de pagina login.class.php.

wil ik de klasse login echter gebruiken op de pagina file.php (in de map files/files_2/), dan werkt dit niet meer, want dan moet ik in login.class.php bij de include een extra '../' zetten, maar dan werkt het op index.php weer niet meer.

Hopelijk is mijn probleem duidelijk genoeg  

Edit: includen door include_once('/main/main.class.php'); te doen werkt blijkbaar niet  

5 antwoorden

Gesponsorde links
Offline Koen - 17/07/2009 11:51
Avatar van Koen PHP expert try PHP.net: set_include_path 
Offline avdg - 17/07/2009 11:55 (laatste wijziging 17/07/2009 14:27)
Avatar van avdg PHP gevorderde Ik ben bezig met wat code, even geduld  

Hier is het dan (weer snel geschreven  )

Met deze codes worden je classes automatisch ingevoegd indien nodig

  1. <?php
  2. /**
  3.  * Autoloader
  4.  *
  5.  * Gebruik:
  6.  *
  7.  * //Stel je includepath in op de plaats waar je classen zitten
  8.  * //vervang path1 en path2 met je classdirectories (vanaf de root van je systeem!)
  9.  * set_include_path(implode(PATH_SEPARATOR, array('path1', 'path2', get_include_path()));
  10.  * include Loader.php; //loader invoegen in je code
  11.  *
  12.  * Dan kan je 2 dingen doen:
  13.  *
  14.  * - Manueel classes invoegen:
  15.  * Loader::loadClass('a');
  16.  *
  17.  * - Of gewoon automatisch laten invoegen door spl_autoloader
  18.  * dit is dan je enige regel die je hebt(aangeraden):
  19.  * Loader::registerAutoloader();
  20.  */
  21.  
  22. Class Loader
  23. {
  24. public static function loadClass($class)
  25. {
  26. if (!class_exists($class)) {
  27. include $class . DIRECTORY_SEPARATOR . $class . '.class.php';
  28. }
  29. }
  30.  
  31. public static function registerAutoloader($unregister = false)
  32. {
  33. if ($unregister) {
  34. spl_autoload_unregister('Loader::LoadClass');
  35. } else {
  36. spl_autoload_register('Loader::LoadClass');
  37. }
  38. }
  39. }

Graag zou ik willen dat je dan zelf op php.net documentatie zoekt over de functies die je niet kent

Bugs? melden! (ty joost -> fixed)
Offline Joost - 17/07/2009 13:16
Avatar van Joost PHP expert
avdg schreef:
Ik ben bezig met wat code, even geduld  

Hier is het dan (weer snel geschreven  )

Met deze codes worden je classes automatisch ingevoegd indien nodig

[..code..]
Graag zou ik willen dat je dan zelf op php.net documentatie zoekt over de functies die je niet kent

Bugs? melden!
Bugje: je gaat nu {$class}class.php includen, moet nog een puntje tussen  
Offline Raze - 17/07/2009 14:11 (laatste wijziging 17/07/2009 14:13)
Avatar van Raze PHP beginner @avdg: ik kom écht niet wijs uit je klasse, ook niet met die array bovenaan enzo... sorry, kan je wat meer uitleg geven aub?


Dit is wat ik nu heb:

main/main.class.php
  1. <?php
  2. class main {
  3.  
  4. public function setDbcCon() {
  5.  
  6. // Hier wordt de database-verbinding gemaakt
  7.  
  8. }
  9. }
  10.  
  11. ?>


login/login.class.php
  1. <?php
  2.  
  3. set_include_path('/'.'main');
  4.  
  5. include_once('main.class.php');
  6.  
  7. class login extends main {
  8.  
  9. public function login($userInput) {
  10.  
  11. // Hier wordt de gebruiker ingelogd
  12.  
  13. }
  14.  
  15. public function checkUser($user_ID) {
  16.  
  17. // Hier wordt gekeken of de gebruiker is ingelogd (de pagina beveiligen)
  18.  
  19. }
  20.  
  21. public function logout() {
  22.  
  23. // Hier wordt de gebruiker uitgelogd
  24.  
  25. }
  26.  
  27. ?>


zoals je ziet heb ik echt geen besef waar ik de set_include_path()-functie moet gebruiken (bij de klasse zelf of op de pagina's waar ik de klasse login gebruik? dat heb ik namelijk ook al geprobeerd maar dat werkt ook niet).
2de probleem is dan: hoe moet ik ze gebruiken. Ik heb de php.net-pagina hiervan al bekeken, ook die van include(_once) etc., maar de uitleg daar is best moeilijk voor me.  
Offline avdg - 17/07/2009 14:14
Avatar van avdg PHP gevorderde Als je classes ook in andere mappen zitten is dat geen probleem, zolang je dezelfde structuur volgt.
Je moet dan gewoon die map dan toevoegen aan die array voor je set_include_path
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.225s