"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:8j2cq3pc0fojtullk11ov7bseccnj56a84@4ax.com...
> Birger skrev:
>
>> Jeg har selv lidt bøvl med scope for variable.
>> Iht. manualen, er alle variable der anvendes udenfor funktioner globale.
>> også i include filer - men jeg er stadig nødt til at deklarere dem som
>> global $varnavn;
>> i begyndelse af include filer, for at det faktisk virker.
>
> Det lyder mystisk. Jeg lægger ofte definitioner og
> initialiseringer ud i en særlig fil. Definitioner er globale og
> kendt inden i en funktion. Initialiseringen behandler almindelige
> variable, og de er globale, men ukendte inden i funktioner.
>
> Jeg erklærer dem ikke igen på nogen måde når jeg bruger dem i en
> kaldende fil.
>
> Skelner du ikke mellem inden for og uden for en funktion?
>
Jo, det gør jeg.
F.eks.:
<?php
session_start();
include 'db-func.php';
/*
db_func.php indeholder funktioner, der behandler da til/fra database. Alle
funktioner i db_func.php bruger samme $link variabel, og alle har den
deklareret i begyndelsen, som
global $link.
*/
....
if ( $link = DbConnect()) {
if ( $res = SomeDbFunc()) {
...
}
else {
echo 'Database fejl : '.mysql_error()."<br>\n";
}
}
else {
echo 'Fejl : '.mysql_error()."<br>\n";
}
Jeg får en fejl, der siger at $link ikke er en gyldig forbindelse til
databasen.
Ikke når $link tildeles en værdi, men når den forsøges anvendt i
SomeDbFunc().
Hvis jeg i toppen af bd_func.php indsætter linien
global $link;
virker tingene som de skal (forventet).
Det virker lidt som variablen skal have en værdi (være anvendt eller tildelt
en værdi), inden den kan anvendes i en include.
(gobal $link; i en funktion, er ikke den samme $link som i "hovedprogrammet"
hvis $link ikke allerede eksisterer, som deklaration eller har tildelt en
værdi).
Jeg har også set eksempler på, at globale variable anvendt første gang i
includerede filer, ikke kendes i det script der includerer dem. Her er jeg
så nødt til at enten initialisere dem, eller deklarere en global variabel,
inden filen includeres. Det skulle heller ikke være nødvendigt, som jeg
forstår dokumentationen.
Tror måske det er et one.com fænomen.
(
PHP Version 5.2.5
http://varmeretter.dk/phpver.php
)
Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt hurtigt og billigt. Daglig
opdatering.