[PHP] Problem med inkludering av filer

Permalänk

[PHP] Problem med inkludering av filer

Jag har ett gäng filer med samma beroenden som nedan men med lite annat innehåll

config.php - innehåller variabler för grundläggande inställningar.

<?php $VAR1 = "DATA"; ?>

functions.php - innehåller funktioner jag använder ofta tex lite
databasfunktioner.

<?php require("config.php"); function funk1(){ echo $VAR1; } ?>

sida1.php

<?php require("config.php"); echo $VAR1; ?>

sida2.php

<?php require("functions.php"); funk1(); ?>

Problemet ligger i att sida1.php skriver ut "DATA" medans sida2.php skriver inte ut något alls. Jag tycker att funk1() borde nå variabeln $VAR1. Någon som har koll?

Permalänk
Medlem

functions.php bör lyda

<?php require("config.php"); function funk1(){ global $VAR1; echo $VAR1; } ?>

eller

<?php require("config.php"); function funk1(){ echo $GLOBALS["VAR1"]; } ?>

Se http://se2.php.net/global.

Permalänk
Medlem

Variable scope är ditt problem. Funktionskroppar har ingen kännedom om variabler som är skapade utanför dem, testa följande:

<?php function funk1(){ global $VAR1; echo $VAR1; } ?>

EDIT: Malesca, din sneaky fucker!
Jag bifogar en länk som är bättre än din
http://se2.php.net/manual/en/language.variables.scope.php

Visa signatur

Brass knuckles and a 2x4

Permalänk

Bah, jag som är van vid C/C++. Osmidigt värre

Tackar för hjälpen.

Permalänk
Medlem

Du kan ju alltid använda konstanter i config-filen, om deras värden inte behöver ändras under exekvering.
Konstanter kan nås över allt i PHP-skriptet.

Så här alltså...

config.php

<?php define('VAR1', 'DATA'); ?>

functions.php

<?php require("config.php"); function funk1(){ echo VAR1; } ?>

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av TheGoodOne
Bah, jag som är van vid C/C++. Osmidigt värre

Tackar för hjälpen.

Måste man inte deklarera globals i C/C++?

Permalänk

Nja, skulle jag säga.

Variabler som inte deklareras i en funktion blir ju globala till skillnad från php.

#include <iostream> int a = 2; int b = 3; int main(){ std::cout << a + b; return 0; }

fungerar ju.

Permalänk
Hedersmedlem

Sedär. Alltid lär man sig nåt nytt.