Avatar billede hmortensen Nybegynder
09. maj 2004 - 17:54 Der er 19 kommentarer og
2 løsninger

Rigtig eller forkert

Hejsa

Nu har jeg set så mange måder at skrive strenge med virabler på, men hvilken måde er den rigtige ?

"Her kommer en $var"
"Her kommer en ".$var
"Her kommer en {$var}"
'Her kommer en $var'
'Her kommer en '.$var

Hvad bør man bruge: " eller ' ?

echo eller printf ?

$var["værdi"] eller $var['værdi'] ?

Et er jo at skrive noget kode, men noget andet er at skrive det korrekt.
Avatar billede olebole Juniormester
09. maj 2004 - 18:06 #1
<ole>

... den korrekte syntaks er afhængig af, hvad man mener med det, man skriver  :)

/mvh
</bole>
Avatar billede olebole Juniormester
09. maj 2004 - 18:09 #2
Om du bruger enkelte eller dobbelte gåseøjne, er i de eksempler, du viser, ligegyldigt.
echo og printf er to forskellige ting. printf er en funktion - det er echo ikke - og så fungerer de forskelligt:
  http://dk.php.net/manual/en/function.echo.php
  http://dk.php.net/manual/en/function.printf.php
/mvh
Avatar billede hmortensen Nybegynder
09. maj 2004 - 18:09 #3
Det var ikke specielt uddybende ;)
Avatar billede olebole Juniormester
09. maj 2004 - 18:11 #4
Nej, det er altid langt mere uddybende at se efter i dokumentationen  :)
Avatar billede jakoba Nybegynder
09. maj 2004 - 18:12 #5
Den eneste der er virkelig forkert er:
    'Her kommer en $var'
medmindre altså, som ole er inde på, du ønsker at få skrevet bogstaverne  '$'. 'v', 'a', 'r'.

PHP prøver at tækkes noget mær alle ved at have en hulens masse 'features'. så mange at det nogen gange er mere forvirrende end nyttigt.
En overgang kunne man sågar skrive if sætninger i noget i retning af basic suntax:
    if (betingelse):
        sætninger
    else
        sætninger
    endif

du kan se reglerne for strenge her: http://dk.php.net/manual/en/language.types.string.php

mvh JakobA
Avatar billede olebole Juniormester
09. maj 2004 - 18:26 #6
hindu_skp >> 'Korrekt' syntaks er ikke altid helt kongruent med 'god kodeskik'. Personligt prøver jeg som oftest at tørre mig, før jeg ski...  :)

Jakob viser ét problem med enkelte gåseøjne ... et andet kunne være:
$bla = 'En linie\n';
$bla .= 'En ny linie';
print $bla;

som returnerer:
  En linie\nEn ny linie
...hvilket nok ikke var koderens mening. Med dobbelte gåseøjne havde han fået returneret teksten på 2 linier.

Jeg prøver som sagt altid at sikre mig - og bruger derfor altid dobbelte gåseøjne, medmindre jeg er _tvunget_ til at bruge enkelte. Så laver jeg aldrig fejl (ehhhh ... på dét område, i det mindste - høhø).

Af samme grund sætter jeg _altid_ gåseøjne om attributter i HTML - selvom de ikke altid _skal_ være der. Så glemmer jeg dem aldrig, når de virkelig _skal_ være der  ;o)
/mvh
Avatar billede olebole Juniormester
09. maj 2004 - 18:31 #7
I mange tilfælde kan du såmænd også skrive $var[værdi] - uden gåseøjne. Lad være ...!!! Gør det ikke ...!!! Glem det ...!!!

Det er en fejl, som PHP godt nok prøver at rette op på ved at forsøge at gætte, hvad du mente - men i værste tilfælde kan du introducere fejl og/eller sikkerhedshuller.

Morale: Skriv _altid_ gåseøjne i array-kald ...!  ;o)
/mvh
Avatar billede olebole Juniormester
09. maj 2004 - 18:34 #8
... og så er der naturligvis også her en undtagelse:
  $bla = "Her henter vi en variabel $row[noget] i et array.";

Den linie er okay, men jeg foretrækker altid selv at skrive den som:
  $bla = "Her henter vi en variabel ".$row["noget"]." i et array.";

Så bevarer jeg mine vaner og er sikker på ikke at lave fejl ... der er fejlmuligheder nok, så det gælder om at minimere dem, man kan  ;o)
Avatar billede hmortensen Nybegynder
09. maj 2004 - 18:38 #9
Jeg skriver selv altid med "" og variabler uden for selve strengen, altså "str".$str."str", og det virker jo også fint.

Har altid fået af vide, at strenge og variabler skal adskelles.

Hvad med tal ?
$var = 123;
eller
$var = "123";

den første vil vel være int og den næste string, eller er php ligeglad ?
Avatar billede olebole Juniormester
09. maj 2004 - 19:30 #10
Her er PHP (desværre) også temmelig tilgivende:

$bla = "123";
$bla .= "23";
print $bla;

returnerer som forventet 12323.

$bla = 123;
$bla .= 23;
print $bla;

returnerer desværre også 12323 - hvor en fejl havde været mere på sin plads.

$bla = 123;
$bla += 23;
print $bla;

returnerer som forventet 146.

$bla = "123";
$bla += 23;
print $bla;

returnerer desværre også 146.

PHP er desværre et frygtelig sloppy sprog på en del punkter  :o|

F.eks. er JavaScript en del mere restrektivt end PHP på variabel-typer - selvom det ikke er nær så strikt som f.eks. Java eller C++.
Jo mere komplekse ting, man koder/programmerer, jo vigtigere er det, at der er styr på den slags ting ... men man kan jo kun håbe på, at PHP 'vokser' med tiden og ender som et rigtig seriøst sprog  :)
/mvh
Avatar billede Slettet bruger
09. maj 2004 - 19:30 #11
Jeg plejer at bruge noget i stil med:

echo "<a href='{$row['url']}'>{$row['titel']}</a>";

Sagt på en anden måde - jeg bruger:
- "" om strenge. (Så jeg kan bruge variable indenfor)
- '' om HTML-attributter. (Så jeg ikke skal escape dem)
- {} om variable i strenge (Så jeg kan skrive variable på samme måde som udenfor)
- '' om arraynøgler - med mindre nøglen er en streng, der skal fortolkes.
- '' om småstrenge, der ikke skal fortolkes.
Avatar billede hmortensen Nybegynder
09. maj 2004 - 19:49 #12
Skidt at man kan regne med en streng

Holder altid HTML uden for php'en...

ole, kan man ikke dimensionere/deklarere sine variabler som en datatype ?

Er jo, i andre sprog, en meget vigtig faktor for eksekvering i forhold til hukommelse og hastighed.

php er jo også kun et script sprog ;)
Avatar billede olebole Juniormester
09. maj 2004 - 20:33 #13
Jo, man kan godt type-cast'e variabler:
  $bla = (int) "123";
meeeen .... det er stadig lidt kikset, at 123 er det samme som "123"  :o|
Avatar billede hmortensen Nybegynder
09. maj 2004 - 20:54 #14
Ok, jeg kan konkludere at jeg ikke gør det forkert så ;)

Vil du ha point ?
Avatar billede olebole Juniormester
09. maj 2004 - 21:01 #15
Joooh tak - men jeg vil gerne dele med Jakob og sandbox, hvis vi kan få dem til at kaste et svar  :)
Avatar billede Slettet bruger
09. maj 2004 - 22:23 #16
Forresten er 123 og "123" ikke altid helt det samme:

$tal=123;
$tekst="123";

if ($tal==$tekst) { echo "Tal og tekst har samme værdi";}
if ($tal===$tekst) { echo "Tal og tekst er ens";}

Kun den første af de to sammenligninger vil udskrive noget. Hvis du vil undersøge om noget har både samme type og værdi skal du altså bruge === i stedet for bare ==

Den specielle kontrolstruktur, som jakoba nævnte er forresten også stadig gyldig. Det er endda den, jeg vil anbefale til brug i templatefiler, som udelukkende styrer output. Her er et eksempel:

<?php if (count($liste)>0): ?>
  <table>
    <tr>
      <th>Navn</th>
      <th>Nummer</th>
    </tr>
    <?php foreach ($liste as $linie): ?>
      <tr>
        <td><?php echo $linie['navn']; ?></td>
        <td><?php echo $linie['nummer']; ?></td>
      </tr>
    <?php endforeach; ?>
  </table>
<?php else: ?>
  Der var ingen resultater
<?php endif; ?>

Så har jeg også gjort lidt for at fortjene point ;-)
Avatar billede olebole Juniormester
09. maj 2004 - 23:46 #17
Ja, det er rigtigt, at man kan sammenligne med '==='. Det kan også være yderst vigtigt ved booleans  ;o)
Avatar billede sukos Juniormester
10. maj 2004 - 01:06 #18
Og ellers, så kommer man vel ikke til at ta' brød med til bageren, hvis man altid holder PHP koder for sig?

F.eks.
$var = "user";
mysql_query("SELECT `". $var ."` FROM `db`") or die (mysql_error());

echo"<b>". $var ."</b>";


Så vidt jeg har forstået, så vil brugen af gåseøjne sikre at dit script vil virke med andre standarder?

Og brug ALTID
<?php
til at starte et script.
Ikke nødvendigt måske, men hvis det skulle blive det, (php.ini), ja, så er det ikke nødvendigt alligevel
Avatar billede olebole Juniormester
10. maj 2004 - 19:56 #19
Damned ... kan vi da aldrig komme til at skændes om noget somhelst?  ;D
Jeg er helt enig, sukos. Man bør passe meget på med at undlade at bruge ting, der 'ikke er nødvendige'. Holder man sig på den sikre side - også selvom det koster lidt ekstra tegn - gør man livet meget lettere for sig selv ... og for ens evt. kunder  ;o)

Nu, vi så har den fremme: Som du ser, bruger sukos accent graves (backticks) omkring navne i sin SQL-kommando:
  mysql_query( "SELECT `navn` FROM `db`" ) or die ( mysql_error() );

Det sikrer bl.a. mod fejl, hvis du kommer til at bruge et navn, som er reserveret i MySQL. En kommando som denne vil fejle:
  mysql_query( "SELECT by FROM db" ) or die ( mysql_error() );
da MySQL bruger det engelske ord 'by' til sortering af record-sets.

Denne feler derimod ikke:
  mysql_query( "SELECT `by` FROM `db`" ) or die ( mysql_error() );
/mvh
Avatar billede olebole Juniormester
10. maj 2004 - 20:04 #20
At jeg så mener, man aldrig bør bruge ordet 'by', er en anden ting. Sproget på WWW er engelsk og har man først én gang arbejdet videre med scripts skrevet af en asiatisk programmør (der skriver på sit eget sprog), ved man, hvor vigtigt det er, at holde sin kode international  ;o)
Jeg har engang haft 'fornøjelsen' at arbejde med en online DHTML-editor komponent, der hedder 'ace.htc' og som er skrevet af en indonesisk koder. De fleste af hans kommentarer stod på indonesisk, så det var lidt af et oversætterhelvede med et website, der kunne 'oversætte' fra indonesisk til engelsk  :oP
Avatar billede hmortensen Nybegynder
10. maj 2004 - 20:07 #21
Den del er jeg hel med på ;)

Det var bare lige om jeg havde mine syntaxer rigtige, og det havde jeg
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