[PHP] Stop includen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
Ik heb een vraagje:
ik ben een file in php aan 't includen en ik wil dat hij een andere file include en dan stopt met includen... (snappie?)
Oftewel, ik heb een versie 2 van een script en een bepaalde variabele die wel wordt meegegeven door versie 1, maar niet meer door versie 2.
Alle scripts op de site laden automatisch func.inc.php (functions) en geven $var mee. Nu ben ik versie 2 van die functies aan 't ontwikkelen voor de nieuwere pagina's die $rav definieert voor de include.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
func.inc.php

if($var) {
 require("/php/func2.inc.php");
}

# blaat functies voor versie 2



func2.inc.php

# het oude func.inc.php met functies voor versie 1

Alle scripts includen dus func.inc.php, maar mogen na includen van func2 niet meer doorgaan met het definieren van de daaropvolgende functies. Hoe kan ik dat (anders dan met een heeeeele lange else) doen?

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

als ik het goed begrijp wil je dus een file die include wordt, stoppen als ie bij functie x aankomt.....

voor zover ik weet kan je een file die geinclude wordt niet stoppen
hij wordt of helemaal erin gezet, of totaal niet

wat je wel kan doen is de file parsen in je script
maar lijkt mij nogal omslachtig om zoiets te doen
of
waarom werk je tegeljik met 2 versies.....
kan je niet detecteren welke versie gebruikt wordt en dan v1 includen van die functies en als versie 2 detect wordt versie 2 includen

(ja dan krijg je 2 files 1 bevat alle functies voor v1 en de ander voor v2 )

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
Peluso schreef op 13 december 2003 @ 01:08:
als ik het goed begrijp wil je dus een file die include wordt, stoppen als ie bij functie x aankomt.....
Als hij ziet dat $var gedefinieerd is moet'ie stoppen met dat ge-include ;)
voor zover ik weet kan je een file die geinclude wordt niet stoppen
hij wordt of helemaal erin gezet, of totaal niet
daar was ik al bang voor
wat je wel kan doen is de file parsen in je script
maar lijkt mij nogal omslachtig om zoiets te doen
of
waarom werk je tegeljik met 2 versies.....
kan je niet detecteren welke versie gebruikt wordt en dan v1 includen van die functies en als versie 2 detect wordt versie 2 includen
dat is dus precies wat ik nu heb.. 2 files met functies.. Wat jij bedoelt is de hele else-loop die ik hier moet maken in een andere file zetten en die includen als er geen $var wordt gelezen.. (toch?)
(ja dan krijg je 2 files 1 bevat alle functies voor v1 en de ander voor v2 )
Thx voor je reactie :)

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 18-09 18:20

DUX

blijft ook nu voor Oranje

Include heeft inderdaad geen andere parameters dan de naam van het bestand. Het voorstel van Peluso lijkt mij ook helemaal zo gek nog niet, al zal nieuwe functies synchroniseren wat omslachtiger gaan omdat je dan twee bestanden moet bijwerken in plaats van een.

[edit]

Peluso bedoelt:

PHP:
1
2
3
4
5
6
7
8
if($versienodig == 1)
 {
 include("/php/func.inc.php")
 }
else
 {
 include("/php/func2.inc.php")
 }

[ Voor 27% gewijzigd door DUX op 13-12-2003 01:21 ]

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
nope daar zal 't idd op neerkomen.. was ik al bang voor.. kon niks vinden en zo omslachtig is 't niet hoor.. was alleen wel leuk/makkelijk geweest als er een andere methode was.
Thx :)
(wat mij betreft slotje ;).. ik ga op de manier zoals hierboven beschreven verder)

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

ja sorry dat ik er geen voorbeelden bij heb gedaan
tis nogal laat en heb etenje met collegaas gehad met drank ;)

maar inderdaad die code opzet bedoelde ik

met parsen bedoelde ik eigenlijk

inlezen van de te includen file (per functie) waar ALLE functies instaan (dus v1 en v2) en dan aan de hand van functie naam ofzow bepalen welke versie die functie voor is en als het neit klopt die functie niet includen en doorgaan naar de volgende functie in de include (maar dat kan je dan dus niet met include doen ;))

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

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

drm

f0pc0dert

En toch kan het stiekem wel, nl. met return.

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


Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
en toch doet'ie nog steeds raar...
PHP:
1
2
3
4
5
6
7
8
9
10
if ($oude_var) {
 require("oude.inc.php");
 echo "blaat1";
 return;
 echo "blaat2";
}

else {
 #blaat nieuwe functies
}

Dit doet het uiteraard perfect, maar dat is dubbelop, want nou heb ik én een return en een else (en hij voert de else alleen uit als er geen oude var bestaat..)
Ik zie ook alleen blaat1 verschijnen en niet blaat2.
Als ik de return eruit haal doet hij het ook perfect en zie ik blaat1 en blaat2.
Maar ik wil die else eruit hebben. Ik neem aan dat dat ook moet kunnen, dus ik gooi hem eruit.
Wat krijg ik dan?

Fatal error: Cannot redeclare kop() in /htdocs/php/oude.inc.php on line 32

kop() is een van de functies die in beiden voorkomt, maar versie 2 is uiteraard verbeterd.
Hoe kan dat? Maakt hij eerst alle functies aan die in een script zitten en gaat hij daarna pas de rest van de code uitvoeren? En zoja, hoe is dat te omzeilen?

[ Voor 4% gewijzigd door bartjenl op 23-12-2003 02:22 ]

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • nxt
  • Registratie: November 2001
  • Laatst online: 24-08 15:34

nxt

je zou ook de functie function_exists kunnen proberen\
die gebruik ik zelf voornamelijk om makkelijk te kunnen wisselen tussen hosts
zoals bijv bij de functie floatval(..) doe ik iets van
code:
1
2
3
4
5
if (!function_exists("floatval")) { 
    function floatval($nr) {
        ...
    }
}

waardoor ik de functie floatval zowel bij php versies < 4.2.0 als > 4.2.0 kan gebruiken.

wellicht kun je hier iets mee, door te kijken of de functie al gedefineerd is,
en zo ja, doe niets
zo nee, gebruik de functie uit func2.inc.php

Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
hehe jah maar dan moet ik bij elke nieuwe functie een hele if-loop gaan zetten en als straks alles omgezet is naar versie 2 al die loops weer weghalen.. Dan liever een grote else waar alles in staat...
Dus: op jouw manier zou 't idd wel werken, maar is een beetje te omslachtig voor dit doel..

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

bartjenl schreef op 23 december 2003 @ 02:21:
en toch doet'ie nog steeds raar...
PHP:
1
2
3
4
5
6
7
8
9
10
if ($oude_var) {
 require("oude.inc.php");
 echo "blaat1";
 return;
 echo "blaat2";
}

else {
 #blaat nieuwe functies
}

Dit doet het uiteraard perfect, maar dat is dubbelop, want nou heb ik én een return en een else (en hij voert de else alleen uit als er geen oude var bestaat..)
[..]
Je hebt gelijk dat het dubbelop is, maar wat doe je nou dan? Je haalt _allebei_ de opties eruit, ja, dan is het dubbel-op (dubbel==2) - 2 opties = 0 -> turrlijk laad hij alles.
OF je laat de return staan, OF je laat de else staan...

Acties:
  • 0 Henk 'm!

  • trogdor
  • Registratie: Mei 2003
  • Laatst online: 22-04 10:17
Je moet die functies ook niet definieren binnen een if, dat is vies.
Gewoon een conditional include gebruiken.

Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
Kippenijzer schreef op 23 december 2003 @ 13:59:
[...]
Je hebt gelijk dat het dubbelop is, maar wat doe je nou dan? Je haalt _allebei_ de opties eruit, ja, dan is het dubbel-op (dubbel==2) - 2 opties = 0 -> turrlijk laad hij alles.
OF je laat de return staan, OF je laat de else staan...
neej ik laat de return uiteraard wel staan, alleen haal de else weg. Blijkbaar definieert hij de functies dan tóch.
Vb:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#func.inc.php:

if ($oude_var) {
 require("oude.inc.php");
 return;
}

function kop() {
 #blaaaaaaaaaaat
}


#oude.inc.php:

function kop() {
 #ouwe blaaaaaaaaaaat
}


Dat pikt hij dus niet, hij zegt dat de functie kop() in oude.inc.php niet opnieuw gedefinieerd kan worden, dus hij heeft de nieuwe functie kop() al geladen! En dat terwijl een return toch op dat moment zou moeten stoppen met includen en alles wat erna komt niet moet uitvoeren. Dit doet hij ook niet, BEHALVE functie-definities... wáárom?

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

  • bartjenl
  • Registratie: Januari 2002
  • Laatst online: 14-09 19:29
trogdor schreef op 23 december 2003 @ 14:00:
Je moet die functies ook niet definieren binnen een if, dat is vies.
Gewoon een conditional include gebruiken.
vies is relatief. Ik wil het graag op een mooie manier doen, maar het moet ook werken. Op de manier waarop ik het nu heb, met een else{} werkt 't perfect, alleen dat is dus idd volgens mij niet de mooiste manier. Mijn vraag is: hoe dan wel?
een conditional include? je bedoelt:
PHP:
1
2
3
4
5
6
if ($oude_var) {
 include("oude.inc.php");
}
else {
 include("nieuwe.inc.php");
}

??

Dat is precies (edit) bijna hetzelfde want de code die in oude.inc.php resp. nieuwe.inc.php zit, plakt hij als het ware gewoon in de huidige code. Gevolg: functies die worden gedefinieerd in een if......

[ Voor 4% gewijzigd door bartjenl op 23-12-2003 20:36 ]

"Do not worry about your difficulties in mathematics; I can assure you that mine are still greater" - Albert Einstein (1879-1955)


Acties:
  • 0 Henk 'm!

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

drm

f0pc0dert

bartjenl:
Dat is precies hetzelfde want de code die in oude.inc.php resp. nieuwe.inc.php zit, plakt hij als het ware gewoon in de huidige code. Gevolg: functies die worden gedefinieerd in een if......
Afgezien van het feit dat dat strict genomen niet helemaal waar is ben ik wel met je eens dat dat voor wel of niet vies helemaal niets uitmaakt.

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

Pagina: 1