login  Naam:   Wachtwoord: 
Registreer je!
 Forum

basi vraagje over gebruik " en '

Offline markla - 20/12/2010 20:23
Avatar van marklaPHP interesse Zou iemand alsjeblieft de moeite willen nemen en mij voor eens en voor altijd te vertel wanneer ik een " of een ' inde code moet gebruiken.

als ik dit doe
  1. echo"<a href="#" onClick="popup('popup.html','shouts','400','400');">Open popup</a>";


krijg ik
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in bestand.php on line 1

en als ik dit doe

  1. echo'<a href="#" onClick="popup('popup.html','shouts','400','400');">Open popup</a>';


krijg ik

Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';' in bestandnaam.php on line 72

21 antwoorden

Gesponsorde links
Offline MrWolf - 20/12/2010 20:26
Avatar van MrWolf Lid
  1. echo'<a href="#" onClick="popup(\'popup.html\',\'shouts\',\'400\',\'400\');">Open popup</a>';
Offline WouterJ - 20/12/2010 20:29 (laatste wijziging 20/12/2010 20:32)
Avatar van WouterJ HTML gevorderde Als je deze html code wilt echoen in php:
  1. <div id="box">

Gebruik je ', want in de code zelf zie je al " staan en als je zou beginnen met " lijkt voor php hier dus het einde van de var te zijn.
De code wordt dus:
  1. echo '<div id="box">';


Als je dit wilt echoen: Mark's vraag. Gebruik je ", want in de tekst staat al '. Als je dit zo laat staat denk php dus dat daar de var is afgelopen.
De code wordt dus:
  1. echo "Mark's vraag";


Nu een probleem want wat als we ze alle 2 gebruiken?
  1. <div id="box">Mark's vraag</div>

In dit geval zullen we ' quotes gebruiken. Waarom? Omdat php ' met een \ ervoor niet ziet als een einde van een var.
De code wordt dus:
  1. echo '<div id="box">Mark\'s vraag</div>';

[EDIT]Zoals je ziet snapt de highlighting van dit forum de \' niet...
Offline pijke - 20/12/2010 20:32
Avatar van pijke Gouden medaille

Lid
niet helemaal mee eens, waldio.
het beste is om altijd bij een echo ' te gebruiken.
deze is namelijk sneller.
en dan moet je soms idd \' gebruiken.
Offline markla - 20/12/2010 20:45
Avatar van markla PHP interesse oke thanks ( @allen) begin het nu een beetje te snappen.
Offline Sam - 21/12/2010 00:09
Avatar van Sam PHP expert
pijke schreef:
het beste is om altijd bij een echo ' te gebruiken.
deze is namelijk sneller.

o.O Geloof je nu echt dat het gebruik van enkele quotes in plaats van dubbele quotes een verschil in snelheid/parsetijd gaat opleveren?
Offline vinTage - 21/12/2010 00:17
Avatar van vinTage Nieuw lid Nou Sam, ik denk van wel ja..

In double quotes 'kunnen' variablen geparsed worden, dus php moet gaan kijken of er vars in de 'string' voorkomen, bij een single quote niet, dat is per definitie een string...lijkt me fair toch ? 
Offline pijke - 21/12/2010 10:40
Avatar van pijke Gouden medaille

Lid
precies!
Offline avdg - 21/12/2010 11:43 (laatste wijziging 21/12/2010 11:47)
Avatar van avdg PHP gevorderde De "-string moet gewoon meer verwerken dan de '-string, maar dat hoeft zich niet altijd meteen om te zetten in extra parsetijd (er is alleen keuze uit meer opties tijdens een escape, maar escapes gebeuren waarschijnlijk vaker). Ik denk zelfs dat je het verschil alleen maar ziet tijdens het compileren en dan zou het slechts een paar instructies extra uitvoeren, maar op uitvoerniveau niets van merkt.

In elk geval, dit is iets dat ik moet uitzoeken in de zend engine. Voor diegene die performance echt op de proef stellen, hier een paar zaken om uit te testen:

1) Loop met het toewijzen van "-string vs '-string
2) Een bashscript die het verschil tussen "php -l testSingleQuotes.php" en "php -l testDoubleQuotes.php" uitrekent. Gebruik hiervoor ook een loop en wissel af tussen beide scripts.

In het eerste geval kijk je vooral naar de uitvoersnelheid van het script. De tweede test gaan we php van buitenaf testen en laten we php bezighouden met het omzetten van een script naar tokens (wat naar mijn verwachtingen betreft het verschil het grootst zou zijn, maar ik kan ook fout zijn).

Edit: test 2 kan ook binnenin php uitgevoerd worden: kijk daarvoor naar de functie PHP.net: php_check_syntax , wat zover ik correct ben ongeveer hetzelfde doet als php lint (of de "php -l" optie van op de commandline).
Offline WouterJ - 21/12/2010 12:48 (laatste wijziging 21/12/2010 12:50)
Avatar van WouterJ HTML gevorderde Heb even snel een testje gedaan:
http://waldio.110mb.com/forum/sneller.php

De waardes die aangegeven worden is het aantal keer dat die sneller was dan de ander. Dus bij:
Enkele quotes: 252
Dubbele quotes: 748

De enkele quotes waren hier dus 252 keer sneller dat de dubbele en de dubble waren 748 keer sneller dan de enkele.

En dan nog eentje die wat uitgebreider is:
http://waldio.110mb.com/forum/sneller1.php

[EDIT] Dit kan volgens mij niet kloppen. De ene pagina geeft andere resultaten dan de andere...
Offline pijke - 21/12/2010 12:49
Avatar van pijke Gouden medaille

Lid
duidelijk dus!
single quote rules!
Offline Sam - 21/12/2010 12:56
Avatar van Sam PHP expert
vinTage schreef:
In double quotes 'kunnen' variablen geparsed worden, dus php moet gaan kijken of er vars in de 'string' voorkomen, bij een single quote niet, dat is per definitie een string...lijkt me fair toch ? 

Doe een snelheidstest en bewijs het zou ik zo zeggen  
Offline avdg - 21/12/2010 13:09
Avatar van avdg PHP gevorderde Even een update op mijn voorgaande post i.v.m. php token:

Citaat:
Korte uitleg: php deelt code op in herkenbare delen, zoals een string, zoiets noemen we een toek, zie http://be.php.net/tokens voor meer informatie


De "- en '-strings worden toegewezen aan token T_CONSTANT_ENCAPSED_STRING en wordt gewoon rauw opgeslagen in php's cache, zonder wijzigingen.

Ik had snel nog een test gedaan met het omzetten van een script in php token, het script gaat als volgt:

  1. <?php
  2.  
  3. echo "Hello world";
  4.  
  5. echo 'Hello world';


Het resultaat hiervan (hmmm, geen codetags voor gewone tekst?):

  1. Line Token Text
  2. -------------------------------------------------------------------------------
  3. 1 OPEN_TAG <?php
  4. 2 WHITESPACE
  5. 3 WHITESPACE
  6. 3 CONSTANT_ENCAPSED_STRING "Hello world"
  7. 3 SEMICOLON ;
  8. 3 WHITESPACE
  9. 5 WHITESPACE
  10. 5 CONSTANT_ENCAPSED_STRING 'Hello world'
  11. 5 SEMICOLON ;


De tool die ik hiervoor gebruikte kan je terugvinden op https://github....ken-stream

Voorlopige conclusie is dat het parsen van de "- en '-string op uitvoerniveau wordt geparst (tenzij ik een detail mis uiteraard).
Offline pijke - 21/12/2010 13:20 (laatste wijziging 21/12/2010 13:21)
Avatar van pijke Gouden medaille

Lid
Ik heb net een test gedaan m.b.t. welke sneller is (' of ").
dit zijn de resultaten:

Parsetijd dubbele quotes: 0,000016000000000016 seconde.
Parsetijd enkele quotes: 0,0000030000000000863 seconde.
Offline Sam - 22/12/2010 10:31
Avatar van Sam PHP expert
pijke schreef:
Ik heb net een test gedaan m.b.t. welke sneller is (' of ").
dit zijn de resultaten:

Parsetijd dubbele quotes: 0,000016000000000016 seconde.
Parsetijd enkele quotes: 0,0000030000000000863 seconde.

Heb je uitgebreide testresultaten die je kan tonen? Want 1 cijfer uit 1 test is niet echt representatief. Kan je ook uitleggen welke test je precies hebt uitgevoerd? Btw, ik wist niet dat PHP zoveel preciesie. Indien je met microtime() werkt moet je true al parameter meegeven om seconden.microseconden te krijgen.
Offline WouterJ - 22/12/2010 11:02
Avatar van WouterJ HTML gevorderde @Sam, ik heb hier eentje die deze test 1000 keer uitvoert en dan kijkt welke sneller is:
http://waldio.110mb.com/forum/sneller.php
De getallen die je daar ziet zijn het aantal keer dat de een sneller was dan de ander.
En hier eentje als je de getallen precies wilt weten:
http://waldio.110mb.com/forum/sneller1.php

Allebei met microtime(true).
Offline Emonk - 22/12/2010 11:21
Avatar van Emonk Lid Zijn deze extreem korte tijden relevant? Ik bedoel, zijn er gevallen denkbaar waarin die een rol gaan spelen?
Offline valles10 - 22/12/2010 11:25
Avatar van valles10 HTML interesse
Emonk schreef:
Zijn deze extreem korte tijden relevant? Ik bedoel, zijn er gevallen denkbaar waarin die een rol gaan spelen?

Ja natuurlijk.
Stel je hebt een pagina met AL je leden op.
  1. while($res = mysql_fetch_assoc($query)){
  2. echo ...;
  3. }

je toont 10.000 leden. dan heb je wel liefst dat dat zo snel mogelijk gebeurt hé? In dit geval gebruik je dan zelfs nog beter een mysql_result of mysql_fetch_array, want die resulteerd nog sneller
Offline Emonk - 22/12/2010 11:25
Avatar van Emonk Lid oké. maar zijn de verschillen groot genoeg dat je ze in de praktijk gaat merken?
Offline valles10 - 22/12/2010 11:27
Avatar van valles10 HTML interesse ehm, op 10.000 results, zal je dat wel degelijk gaan merken.
Offline Emonk - 22/12/2010 11:35
Avatar van Emonk Lid Oké, dank je wel
Offline Ontani - 22/12/2010 13:48
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Iemand die 10.000 results op z'n pagina toont zou slaag moeten krijgen qua usability. Daarvoor is pagination uitgevonden.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.301s