/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problemer med define() og defined()
Fra : RHO


Dato : 12-07-03 13:10

Jeg har problemer med at få konstanter til at virke; dvs som superglobals.
Jeg har to testsider: (kildekode nederst)

testConst_1: Vha af en submit-button kan jeg sætte eller undlade at sætte en
konstant. Der chekkes på værdien vha et echo. og endelig et link til den
anden side

testConst_2: Der chekkes på om konstanten er defineret

Problemet er at testConst_2 altid rapporterer at konstanten ikke er
defineret, Hvad går galt ?. På forhånd tak for svar!

RHO

testConst_1:

<html>
<body>
<?
if(!isset($_POST["send"])){
ECHO "<form method='POST' action='testConst_1.php'>";
ECHO "<input type='submit' value='Send' name='send'></form>";}
else {
define("A_CONST","SAT");}
ECHO A_CONST."<BR>";
?>

<a href="testConst_2.php">page 2</a>
</body>
</html>

testConst_2
<html>
<body>
<?
if (defined("A_CONST")) {
ECHO "SAT";}
else {
ECHO "NOT SAT";}
?>

<BR><a href="testConst_1.php">page 1</a>
</body>
</html>




 
 
Anders K. Madsen (12-07-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 12-07-03 13:36

> Jeg har problemer med at få konstanter til at virke; dvs som superglobals.
> Jeg har to testsider: (kildekode nederst)
>
> testConst_1: Vha af en submit-button kan jeg sætte eller undlade at sætte en
> konstant. Der chekkes på værdien vha et echo. og endelig et link til den
> anden side
>
> testConst_2: Der chekkes på om konstanten er defineret
>
> Problemet er at testConst_2 altid rapporterer at konstanten ikke er
> defineret, Hvad går galt ?. På forhånd tak for svar!
>
> RHO
>
> testConst_1:
>
> <html>
> <body>
> <?
> if(!isset($_POST["send"])){
> ECHO "<form method='POST' action='testConst_1.php'>";
> ECHO "<input type='submit' value='Send' name='send'></form>";}
> else {
> define("A_CONST","SAT");}
> ECHO A_CONST."<BR>";
> ?>
>
> <a href="testConst_2.php">page 2</a>
> </body>
> </html>

Her gør du det at konstanten A_CONST bliver sat hvis der er trykket på submit
og i bunden er der så et link til testConst_2.php...

>
> testConst_2
> <html>
> <body>
> <?
> if (defined("A_CONST")) {
> ECHO "SAT";}
> else {
> ECHO "NOT SAT";}
> ?>
>
> <BR><a href="testConst_1.php">page 1</a>
> </body>
> </html>
>

Her tjekker du om A_CONST er sat...


Jeg tror du forveksler konstanter/superglobals med sessions...
En konstant er jo i PHP, som i alle andre sprog, en "beskrivende streng for en
konstant værdi"...
Altså at man f.eks. bruger konstanter som MAX_UPLOAD_SIZE for tallet 2048,
fordi man lettere kan gennemskue hvad MAX_UPLOAD_SIZE repræsenterer i noget
kode, end en pludselig optræden af tallet 2048.
Så en konstant er altså ikke konstant i den forstand at den forbliver sat...
Konstanter opfører sig på den måde ligesom variabler (med undtagelse af
sessions-vars), de slettes ved scriptets afslutning.

Du skulle tage et alvorligt kig på sessions (http://php.net/sessions) og måske
lige prøve at læse manualerne til konstanter igen, for der står der altså ikke
at de forbliver definerede...

Mvh.
   Madsen

--
- - - - - - - - - - - - - - + - - - - - - - - - - - - - - +
| Anders K. Madsen
http://lillesvin.linux.dk |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| There are 10 types of people in the world... |
Those who understand binary - and those who don't.
| - http://bash.org |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

RHO (12-07-2003)
Kommentar
Fra : RHO


Dato : 12-07-03 14:14

>Jeg tror du forveksler konstanter/superglobals med sessions...

>En konstant er jo i PHP, som i alle andre sprog, en "beskrivende streng for
en

>konstant værdi"...

>Altså at man f.eks. bruger konstanter som MAX_UPLOAD_SIZE for tallet 2048,

>fordi man lettere kan gennemskue hvad MAX_UPLOAD_SIZE repræsenterer i noget

>kode, end en pludselig optræden af tallet 2048.

>Så en konstant er altså ikke konstant i den forstand at den forbliver
sat...

>Konstanter opfører sig på den måde ligesom variabler (med undtagelse af

>sessions-vars), de slettes ved scriptets afslutning.

>Du skulle tage et alvorligt kig på sessions (http://php.net/sessions) og
måske

>lige prøve at læse manualerne til konstanter igen, for der står der altså
ikke

>at de forbliver definerede...

I manualen (kap.9 18-04-2003) står der "Like superglobals, the scope of a
constant is global. You can access constants anywhere in your script without
regard to scope." Det opfatter jeg således at man kan aflæse værdien på alle
sider når den først er defineret. I modsætning til session-variable skulle
man derimod ikke kunne ændre værdien. Er det en fejl-fortolkning ?

RHO



Anders Thorsen Holm (12-07-2003)
Kommentar
Fra : Anders Thorsen Holm


Dato : 12-07-03 15:09

RHO wrote:

> I manualen (kap.9 18-04-2003) står der "Like superglobals, the
> scope of a constant is global. You can access constants anywhere
> in your script without regard to scope." Det opfatter jeg således
> at man kan aflæse værdien på alle sider når den først er
> defineret. I modsætning til session-variable skulle man derimod
> ikke kunne ændre værdien. Er det en fejl-fortolkning ?

Ja, du tolker det forkert.

Der står jo "You can access constants anywhere in your script without
regard to scope" - altså at en konstant kan tilgås hvorsomhelst
indenfor et script. Vel at mærke det samme script, den er defineret i,
eller de scripts, der måtte benytte require() eller include() til at
tilgå det script, hvori konstanten er defineret.

I dit eksempel har du to forskellige scripts, men prøver alligevel at
benytte samme konstant. Problemet er, at når første script er færdigt,
"dør" din konstant.

Som Anders K. foreslog, kunne du få den ønskede effekt vha. session-
variable. Alternativt kunne du definere din konstant i et separat
script, sammen med eventuelle andre konstanter, og benytte require()
eller include(), hvor du har brug for konstanten.

--
Anders Thorsen Holm | http://www.daimi.au.dk/~zoolook/

Overvejer du at købe en DVD-afspiller? Så hold dig fra Fredgaard!
Læs hvorfor: http://www.daimi.au.dk/~zoolook/?page=fredgaard

RHO (12-07-2003)
Kommentar
Fra : RHO


Dato : 12-07-03 16:35

Tak for gode svar!

RHO
> > I manualen (kap.9 18-04-2003) står der "Like superglobals, the
> > scope of a constant is global. You can access constants anywhere
> > in your script without regard to scope." Det opfatter jeg således
> > at man kan aflæse værdien på alle sider når den først er
> > defineret. I modsætning til session-variable skulle man derimod
> > ikke kunne ændre værdien. Er det en fejl-fortolkning ?
>
> Ja, du tolker det forkert.
>
> Der står jo "You can access constants anywhere in your script without
> regard to scope" - altså at en konstant kan tilgås hvorsomhelst
> indenfor et script. Vel at mærke det samme script, den er defineret i,
> eller de scripts, der måtte benytte require() eller include() til at
> tilgå det script, hvori konstanten er defineret.
>
> I dit eksempel har du to forskellige scripts, men prøver alligevel at
> benytte samme konstant. Problemet er, at når første script er færdigt,
> "dør" din konstant.
>
> Som Anders K. foreslog, kunne du få den ønskede effekt vha. session-
> variable. Alternativt kunne du definere din konstant i et separat
> script, sammen med eventuelle andre konstanter, og benytte require()
> eller include(), hvor du har brug for konstanten.
>
> --
> Anders Thorsen Holm | http://www.daimi.au.dk/~zoolook/
>
> Overvejer du at købe en DVD-afspiller? Så hold dig fra Fredgaard!
> Læs hvorfor: http://www.daimi.au.dk/~zoolook/?page=fredgaard



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408935
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste