Avatar billede soloman Nybegynder
02. september 2003 - 00:34 Der er 7 kommentarer og
1 løsning

Hva betyr syntaxen ${variabel}

Jeg fant nettopp en kode som sikkert gjør det jeg vil, men det er noe jeg ikke forstår av syntaxen.

Det er en recursive funksjon som kaller seg selv med ${dir]/${entryname}. Hvorfor ikke $dir/$entryname?

Her er hele funksjonen. (Den fjerner et directory uansett om det er tomt eller ikke - men det er egentlig ikke saken...)

function rm_dir($dir){
  $current_dir = opendir($dir);
  while($entryname = readdir($current_dir)){
    if(is_dir("$dir/$entryname") && ($entryname != "." && $entryname!="..")){
        rm_dir("${dir}/${entryname}");
    }elseif($entryname != "." and $entryname!=".."){
        unlink("${dir}/${entryname}");
    }
  }
  closedir($current_dir);
  rmdir(${dir});
}
Avatar billede jakoba Nybegynder
02. september 2003 - 00:36 #1
Avatar billede Slettet bruger
02. september 2003 - 00:38 #2
Men det bliver ikke brugt til noget.
Så erstat dem bare med $dir og $entryname.

Som eksempelvis
rm_dir($dir."/".$entryname);
Avatar billede jakoba Nybegynder
02. september 2003 - 00:43 #3
Næe, det er det heller ikke, ihvertfald ikke medmindre og 'dir' og 'entryname' er defineret som konstanter.

det kunne være en sjusket måde at skrive  ${"dir"} og ${"entryname"} som så går godt fordi php er meget tolerant med syntaksen og tillader and man udelader anførselstegn om strenge her og der.

${"dir"} og ${"entryname"}  er så variabele variable, bortset fra at der her angiven en konstant så det ville være præcis lige så godt (og faktisk bedre) at skrive:
$dir og $entryname

hvis jeg var helt sikker på det er det ville jeg kalde det noget skodkode.

mvh JakobA
Avatar billede erikjacobsen Ekspert
02. september 2003 - 06:31 #4
I en tekststreng betyder notationen "....${variablenavn}...." blot
ganske almindelig variabel substitution ganske som ".....$variabelnavn....".

Anvender man {...} på dette sted, kan PHP imidlertid forstå langt flere
variabel-syntakser end eller. Et simpelt eksempel er

$a['kkk']='ppp';
print "her er $a['kkk'] \n";

som giver fejl, mens

$a['kkk']='ppp';
print "her er ${a['kkk']} \n";

går godt.

På sin vis kan man sige, at det er den sikre og pæne måde at lave
variabel-substitutioner på i tekststrenge, og at "...$variabelnavn..."
blot er den hurtige, forkortede måde der tilfældigvis bare virker.

Det er bestemt ikke skodkode.

Det kan sammenlignes med altid at skrive `feltnavn` i MySql, selv om
det ikke er et reserveret ord, eller også i MySql at bruge '...' omkring
tal, selv om det ikke er nødvendigt '7913'.

I eksemplet ovenfor burde forfatteren have været konsekvent og bruge,
eller ikke bruge, det alle steder.

Uden for tekststrenge betyder det ganske vist "variable variable".
Avatar billede soloman Nybegynder
02. september 2003 - 08:34 #5
Takk! Akkurat hva jeg trengte!
Avatar billede Slettet bruger
02. september 2003 - 11:23 #6
Hvad bidrager det med i hans eksempel? Det kan jeg stadig ikke se.
Avatar billede Slettet bruger
02. september 2003 - 11:36 #7
Iøvrigt er det da helt korrekt, hvad jakoba skriver at ${variabelnavn} fremfor ${'variabelnavn'} er slamkode. Idet PHP skal gætte, at der ikke er tale om en konstant (som syntax'en ellers indikerer).
Avatar billede erikjacobsen Ekspert
02. september 2003 - 11:43 #8
Jo, men mercur8, i dette eksempel, i tekststrenge, er det ikke længere
variable variable.

Bidrager med i hans eksempel? Bortset fra han ikke er konsekvent, er det
på linie med om man skal have { ... } med i en if, hvis der kun er een
sætning:

  if (.....) { a=9; }

Overflødigt, men læseligt, og nemmere hvis der en dag skal udvides.
Jeg tager dem gerne med i dette tilfælde.

I PHP strenge kan man gøre det samme. Der er er f.eks. forskel på

  $hunde='katte';
  print "$hundeprutter";
  print "${hunde}prutter";
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