[PHP5] Includen van files in klassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
Ik heb een probleem met het includen van files. Ik gebruik bijvoorbeeld deze files:

file1:
/index.php
file2:
/class/view/menuView.php
file3:
/class/db/Pagina.php
file4:
/beheer/index.php


In file 1 gebruik ik file 2:
include_once ("./class/view/menuView.php");
In file 2 gebruik ik file 3:
include_once ("./class/class.Pagina.php");
En in file 4 gebriuk ik ook file 2:
include_once ("./class/view/menuView.php");

Nu vind hij file 2 niet vanuit file 4, en dat is logisch want file 4 zit in een submap en hij zoekt nu naar de map class in deze submap. Om dit op te lossen kan ik het natuurlijk zo doen:
include_once ("./class/view/menuView.php");

Nu geeft menuview.php een fout, die kan namenlijk op zijn beurt Pagina.php niet meer includen. Ik weet wel hoe dit komt, hij probeert altijd te includen vanaf de pagina die in de browser is aangeroepen, en nu zoekt hij dus in menuView.php naar /beheer/class/db/Pagina.php

Hoe kan ik dit verantwoord oplossen? Moet nog wel een beetje porteerbaar blijven.

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Waarom gebruik je niet de DOCUMENT_ROOT variable om een volledig path te defineren?
PHP:
1
2
3
<?PHP
include_once ( $_SERVER["DOCUMENT_ROOT"] . "/class/view/menuView.php" );
?>

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

http://nl2.php.net/autoload

dat is wat jij wil :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Wat doen die te includen files in je DOCUMENT_ROOT? In DOCUMENT_ROOT horen alleen die files te staan die bedoeld zijn voor rechtstreeks opvragen door clients. Includefiles moet je buiten de DOCUMENT_ROOT in een include_path zetten.
edit:
fypfout

[ Voor 8% gewijzigd door sam.vimes op 05-02-2008 09:18 ]


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
sam.vimes schreef op dinsdag 05 februari 2008 @ 08:58:
Wat doen die te includen files in je DOCUMENT_ROOT? In DOCUMENT_ROOT horen alleen die files te staan die bedoeld zijn voor rechtstreeks opvragen door clients. Includefiles moet je buiten de DOCUMENT_ROOT in een include_path zetten.
edit:
fypfout
Ze staan toch in een submap? Ik ben een java programmeur en ben nu 2 maanden bezig met PHP. Ben nogal verward door de manier waarop php met paths omgaat :D

autoload snap ik niet helemaal...

[ Voor 3% gewijzigd door Makkelijk op 05-02-2008 09:35 ]

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Makkelijk schreef op dinsdag 05 februari 2008 @ 09:28:
[...]
Ze staan toch in een submap? Ik ben een java programmeur en ben nu 2 maanden bezig met PHP. Ben nogal verward door de manier waarop php met paths omgaat :D
Het maakt niet uit met welke taal je bekend bent, mappenstructuur werken altijd hetzelfde dus dit is toch niet echt een vraag he.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
disjfa schreef op dinsdag 05 februari 2008 @ 09:31:
[...]

Het maakt niet uit met welke taal je bekend bent, mappenstructuur werken altijd hetzelfde dus dit is toch niet echt een vraag he.
Ik snaptte gewoon niet hoe je kunt opgeven waaralle includes staan. Autoload lost niet echt het probleem op maar het is wel een handige functie...

Ik geef nu include path op en dat werkt inderdaad gewoon, dat was enige wat ik zocht.....
tnx anyway

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Ik definieer meestal een constant die ik daarna weer gebruik om zaken te includen.

PHP:
1
2
define('BASE_PATH', '/path/to/your/app');
require_once(BASE_PATH .'/path/to/your/file');

Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 19:48

Cyphax

Moderator LNX
Het is niet zo ingewikkeld:
This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.
PHP:
1
2
3
4
5
6
7
8
<?php
function __autoload($class_name) {
    require_once $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2(); 
?>

Die $class_name krijg je mee als je een nieuw object maakt (bla = new MyClass1), en dan wordt __autoload onder water automatisch aangeroepen met die naam als parameter. In die functie kan je dan iets doen, zoals het includen van het bestand. Ik heb dat zo ook gedaan, dan wordt er ook niets geinclude dat je niet nodig hebt, en je hebt er verder geen omkijken meer naar. Het enige waar je op moet letten is dus dat de bestandsnamen hetzelfde zijn als je classes.
RAJH schreef op dinsdag 05 februari 2008 @ 09:38:
Ik definieer meestal een constant die ik daarna weer gebruik om zaken te includen.
Dat is ook een goed idee, dat soort constanten kun je mooi centraal bewaren.

[ Voor 12% gewijzigd door Cyphax op 05-02-2008 09:52 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • evolnick
  • Registratie: Januari 2006
  • Laatst online: 04-06-2024
je kunt ook gebruik maken van __FILE__
Deze geeft het path naar het huidige script, ook al include je deze vanaf een andere lokatie.

in /beheer/index.php :
PHP:
1
include_once ( dirname(__FILE__) . "/../class/view/menuView.php");


in /class/view/menuView.php:
PHP:
1
include_once ( dirname(__FILE__) . "/../class.Pagina.php");

Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
evolnick schreef op dinsdag 05 februari 2008 @ 09:53:
je kunt ook gebruik maken van __FILE__
Deze geeft het path naar het huidige script, ook al include je deze vanaf een andere lokatie.

in /beheer/index.php :
PHP:
1
include_once ( dirname(__FILE__) . "/../class/view/menuView.php");


in /class/view/menuView.php:
PHP:
1
include_once ( dirname(__FILE__) . "/../class.Pagina.php");
dank, dit was eigenlijk waar ik in eerste instantie naar op zoek was! :*)
porteerbaarder wordt t niet denk ik

Badieboediemxvahajwjjdkkskskskaa

Pagina: 1