Avatar billede hmm10 Nybegynder
01. april 2006 - 11:41 Der er 15 kommentarer og
1 løsning

Overskriv define()

Hej,

Jeg har en define(), som jeg skal have overskrevet med en ny værdi. Mit script er lidt kringlet, da de to define() er uafhængige af hinanden, så jeg kan ikke bare sætte en :(

Jeg ved godt, at man ikke direkte kan overskrive en define() ved fx. at sætte en ny værdi efter den gamle. Men kan man ikke nulstille en bestemt define() ligesom man fx. kan nulstille en bestem session?

Andre forslag?

HMM
Avatar billede Slettet bruger
01. april 2006 - 11:49 #1
Hvad med:

$foo = define();

unset($foo);

$foo = ny_define();

Jeg kan ikke helt finde ud af om det er det du spørger om? :|
Avatar billede hmm10 Nybegynder
01. april 2006 - 11:51 #2
Jeg manglede vist et eksempel, så det kommer her:

define(TEST, 'dette er test 1');
// Her vil jeg nulstille TEST med en ny værdi
define(TEST, 'dette er test 2');
       
print TEST;
Avatar billede plx Nybegynder
01. april 2006 - 11:58 #3
TEST antager "dette er en test 1" efter første kald til define. Dvs den værdi du definerer i kald nr. 2, får navnet "dette er en test 1"

echo constant('dette er test 1'); // giver dig "dette er test 2"


korrekt:
define('TEST', 'dette er test 1');
define('TEST', 'dette er test 2');
Avatar billede hmm10 Nybegynder
01. april 2006 - 11:59 #4
- jeg kan lave det med session, men vil helst benytte define();
Avatar billede Slettet bruger
01. april 2006 - 12:01 #5
Kan du ikke bruge en reference-pointer måske?

define(&$foo, "bar");

define(&$foo, "jazz");

--pacroon
Avatar billede plx Nybegynder
01. april 2006 - 12:01 #6
Hvis TEST ikke er defineret før du forsøger at bruge den, antager PHP at du mener "TEST"  (altså strengen med indholdet TEST)
Avatar billede hmm10 Nybegynder
01. april 2006 - 12:02 #7
plx >

dvs at

define('TEST', 'dette er test 1');
define('dette er test 1', 'dette er test 2');

print TEST; // giver 'dette er test 2' ?
Avatar billede plx Nybegynder
01. april 2006 - 12:04 #8
nej. Fra php manualen:

bool define ( string name, mixed value [, bool case_insensitive] )

name skal du angive som en streng, så virker det efter hensigten:

define('TEST', 'dette er test 1');
define('TEST', 'dette er test 2');
Avatar billede plx Nybegynder
01. april 2006 - 12:05 #9
TEST << konstant med navn TEST

"TEST" eller 'TEST' << streng med indholdet TEST

der er en meget stor forskel
Avatar billede hmm10 Nybegynder
01. april 2006 - 12:13 #10
Skal jeg så over til session, eller kan man "overskrive" en værdi i define()?

define('TEST', 'dette er test 1');
define('TEST', 'dette er test 2');
print TEST; // giver 'dette er test 1'
Avatar billede erikjacobsen Ekspert
01. april 2006 - 12:28 #11
Som der står et sted på http://php.net/define så "If a constant is once defined, any subsequent attempts to define it once again are ignored". Du kan ikke lave en konstant, og senere ændre den.

Hvorfor bruger du ikke bare en variabel - det er li'som meningen med det.

$TEST='dette er test 1';
$TEST='dette er test 2';
print $TEST;
Avatar billede hmm10 Nybegynder
01. april 2006 - 12:34 #12
erikjacobsen > Som det står i mit problem, "Mit script er lidt kringlet, da de to define() er uafhængige af hinanden"..

Jeg må bruge session's til at løse dette.
Avatar billede erikjacobsen Ekspert
01. april 2006 - 12:53 #13
Ja, det lyder som om du havde misforstået brugen af define - men det er så på plads nu ;)

Og man skal aldrig lave kringlede scripts.
Avatar billede hmm10 Nybegynder
01. april 2006 - 12:59 #14
:) lukker. Nogle der bliver sure, hvis de ikke får points? Smid et svar, hvis du vil have lidt (alle herinde har hjulpet til)
Avatar billede erikjacobsen Ekspert
01. april 2006 - 13:00 #15
Ingen point til mig, tak.
Avatar billede hmm10 Nybegynder
08. juni 2006 - 23:18 #16
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester