[php] class include probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik heb een vreemd probleem met het includen van een class.

Ik zal maar direct instappen:

Ik heb een hoofd pagina die via een parameter alle andere pagina's include(een per keer natuurlijk). Nu include ik alle functies en classen in het begin van dit hoofd bestand via een soort header file (ik include dus een header file die de rest weer include). Bij het includen controleer ik ook of een file al included is en zet ik een flag indien niet. bv. zo:

PHP:
1
2
3
4
5
if(!isset($CLASS_INC))
{
    include "class.php";
    $CLASS_INC = true;
}


Nu heb heb ik een sessie variabel van bv. het type xclass. De defenitie hiervan zit in class.php. Als ik nu op mijn hoofd pagina een andere pagina include en daarin die sessie var probeer te bereiken dan krijg ik een error dat die van een type is die niet gedefineert is. Ook als ik de variabel $CLASS_INC probeer te bereiken dan krijg ik te horen dat die niet bestaat. Als ik echter het stukje code hierboven bovenin die zelfde pagina zet dan krijg ik te horen dat xclass niet nogmaals gedefineert mag worden, wat dus betekent dat hij hem wel kent en dat $CLASS_INC gewoon 'set' moet zijn.

Wat lijkt jullie het beste om te doen?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

include_once gebruiken of de includes zo veel mogelijk van uit 1 file regelen?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
ACM schreef op 02 February 2003 @ 17:58:
include_once gebruiken of de includes zo veel mogelijk van uit 1 file regelen?
Ik regel het nu ook vanuit een bestand.

stel: index.php

PHP:
1
2
3
4
// include de header die de rest include
include "header.php";
// include de werkelijke pagina
include "page.php";


Het probleem is nu dat ik in pagina page een variabel van type (bijvoorbeeld)xclass niet kan gebruiken omdat die niet is gedefineert. En dat is die weldegelijk want die include ik via header.php.

[ Voor 3% gewijzigd door Michali op 02-02-2003 18:08 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

* drm gebruikt tegenwoordig een ietwat andere manier om classes te includen

Ik heb een regel aangenomen waarbij ik elke class in apart bestand zet, genaamd "class.[classnaam].php". Vervolgens roep ik als ik een class nodig heb de volgende functie aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function import ( $class_name ) {
   if ( ! class_exists ( $class_name ) ) {
      $fn = array (
         CLASS_INCLUDE_PREFIX . $class_name . CLASS_INCLUDE_POSTFIX,
         CLASS_INCLUDE_DIR . CLASS_INCLUDE_PREFIX . $class_name . CLASS_INCLUDE_POSTFIX
      );
      foreach ( $fn as $file_name ) {
         if ( file_exists ( $file_name ) ) {
            require ( $file_name );
            return true;
         }
      }
      trigger_error ( "Class $class_name not found. Tried: " . implode ( " and ", $fn ) . " ..." );
      return false;
   } else {
      return true;
   }
}

Zo kun je bovenaan elke pagina (of deelpagina) die een bepaalde class "nodig" heeft
code:
1
import ( 'MyClass' );
zetten. Op die manier worden ook altijd enkel de classes gebruikt die je nodig hebt, en wordt er ook nooit teveel geinclude.

eigenlijk is het ook niet meer dan een veredelde require_once, maar 't staat m.i. net effe iets netter.

overigens moet je bovengenoemde constanten wel definieren, natuurlijk ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
drm schreef op 02 februari 2003 @ 18:39:
* drm gebruikt tegenwoordig een ietwat andere manier om classes te includen

...
Maar maakt het voor jou wel uit waar je ze include? Hij ziet de class wel alleen kan ik er niets mee. Het is toch niet zo dat je eerst iets 'speciaals' moet doen met een object opgeslagen in de sessie voordat je hem kan gebruiken?

[ Voor 62% gewijzigd door Michali op 02-02-2003 18:55 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik heb even zitten lezen en het schijnt dus dat het opslaan van objecten in sessies niet of slecht mogelijk is. Ik ga het dus even anders oplossen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Huh?
Bij mijn ging dat prima, zolang je maar niet verwacht dat je database-connecties en dergelijke nog geldig zijn daarna ;)

En je moet uitkijken dat je niet te veel opslaat.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Bij mij wilde het echt niet baten. Het was een class voor die alle velden van een formulier tijdelijk opslaat om alles weer in te vullen als men terug op de pagina met dat formulier komt. (na een preview van iets oid). Ik gebruik nu gewoon een array en dat gaat ook perfect. Er zaten verder ook geen functies in de class, alleen maar velden dus dit is ook goed.

Noushka's Magnificent Dream | Unity

Pagina: 1