Strings en echo
2 berichten
• Pagina 1 van 1
Strings en echo
Inleiding
In dit artikel wil in ingaan op twee hele belangrijke en erg gerelateerde begrippen binnen PHP. Ik zal het uitgebreid hebben over beide begrippen. Ik hoop hiermee beginners goed op weg te kunnen helpen en ook de PHP’er met iets meer ervaring nog iets nieuws te leren.
Een string is een data type in PHP en vele andere programmeertalen die zich het best laat omschrijven als een serie van karakters of lettertekens. Strings kunnen dus bijvoorbeeld gebruikt worden om woorden of zinnen mee definiëren.
Echo is een belangrijke functie in PHP om strings mee af te drukken. Hierdoor is het een veel gebruikte en vaak onmisbare functie voor iedereen die met PHP programmeert.
Strings
Strings kunnen op vier verschillende manieren gedefinieerd worden:
Single Quoted
De simpelste manier is door gebruik te maken van single quotes. Om een string met single quotes te definïeren zetten we de tekenreeks simpelweg tussen single quotes. De string kunnen vervolgens toekennen aan een variabele. Hieronder volgen enkele voorbeelden:
PHP
Je zit misschien al wel dat je in de problemen komt al de tekenreeks een single quote bevat. Het zal daardoor overkomen dat de string eerder stopt dan eigenlijk de bedoeling is waardoor je een foutmelding zal krijgen. Gelukkig is dit op te lossen door de single quote te "escapen". Een teken kan je escapen door er een backslash voor te zetten.
Maar stel je nu voor dat het laatste teken in je tekenreeks een backslash is. Deze backslash wordt dus gevolgd door een single quote en er zal gedacht worden dat jij de single quote probeert te escapen. De string houdt vervolgens niet op waar jij dat wil en je zal geheid weer foutmeldingen krijgen. Om dit te voorkomen heeft men afgesproken dat je ook een backslash kan escapen. Dit is overigens niet noodzakelijk wanneer een backslash voor een teken dat niet te escapen is.
PHP
Het is ook mogelijk twee strings aan elkaar te plakken. Dit staat ook wel bekend als "concatenation" en kan je doen door een punt tussen twee strings te zetten. Wanneer je een ander datatype aan een string probeert te plakken zal PHP automatisch proberen om deze om te zetten naar een string. Je kan ook meerdere strings in één keer aan elkaar plakken. Alle spaties buiten de strings worden natuurlijk genegeerd, maar vaak worden deze toegevoegd om het overzichtelijker te maken.
PHP
In het tweede voorbeeld zien we dat het getal drie aan twee andere strings geplakt worden. $str1 is immers ook een string. Het getal drie is echter een integer (er staan namelijk geen quotes om) en wordt dus door PHP omgezet naar de string '3' voordat deze aan de andere twee strings geplakt wordt. In het laatste voorbeeld maken we gebruik van haakjes om PHP eerst vier keer vijf uit te laten rekenen. Vervolgens wordt het antwoord daarvan omgezet naar de string '20' en aan de string geplakt. Wanneer dit zonder haakjes geprobeerd wordt gaat dit helemaal mis. PHP zal namelijk het getal 4 aan de string '4 * 5 = ' plakken en vervolgens het resultaat met 5 proberen te vermenigvuldigen en omdat het onmogelijk is een string te vermenigvuldigen geeft PHP een foutmelding.
Double Quoted
Double quoted strings bieden wat extra mogelijkheden over single quoted strings, maar zijn over het algemeen hetzelfde. Double quoted strings kunnen bijvoorbeeld een aantal meer tekens escapen.
Een drietal voorbeelden:
PHP
Een belangrijk verschil met single quoted strings is het feit dat je nu een dollar teken moet escapen. Zou je dat niet doen dan gaat PHP er van uit dat je een variabele probeert aan te roepen. Om expliciet het einde van een variabele te kenmerken kan gebruikt worden gemaakt van accolades. De openende accolade kan direct achter het dollar teken staan, maar zet men er over het algemeen direct voor.
PHP
Men moet ook accolades gebruiken om complexe variabele aanroepen te doen zoals:"{$foo['bar'][2]}"; . Over het algemeen geeft dit echter hele onoverzichtelijke code. Deze syntax wordt dan ook zelden gebruikt en ik raad je dan ook sterk af het te gebruiken. Wil je variabelen in een string gebruiken dan kan je dat het beste doen volgens de laatste regel in het vorige voorbeeld. Deze manier is ook verweg het duidelijkst in combinatie met syntax highlighting.
Heredoc en Nowdoc
Heredoc en nowdoc zijn twee alternative manieren om strings te definiëren. In de realiteit worden ze nauwelijks gebruikt. Ik raad je om het gebruik van deze twee vormen zoveel mogelijk te vermijden, maar ik zal ze voor de volledigheid toch even kort behandelen. Het kan namelijk zo zijn dat je ze toch een keer ergens tegen komt.
Een heredoc string begint met <<< gevolgd door een identifier. Daarna volgt de string en uiteindelijk wordt de string weer afgesloten met de identifier. De identifier moet voldoen aan dezelfde naamgevingsregels als een variabele: hij mag alleen uit letters, getallen en underscores bestaan en moet met een underscore of letter beginnen. Ook is het belangrijk dat de afsluitende identifier helemaal aan het begin van een nieuwe regel staat en er geen tekens tussen de identifier en de puntkomma zitten.
PHP
Bij heredoc worden variabelen net als bij de double quoted syntax geëvalueerd. Dit is echter niet het geval bij nowdoc. Nowdoc wordt op de zelfde manier gedefiniëerd als heredoc en is te vergelijken met de single quoted variant van heredoc. Het verschil in syntax is dat de openende identifier tussen enkele aanhalingstekens staat.
PHP
Een ander opmerkelijk verschil tussen heredoc en nowdoc is dat heredoc niet in klassen te gebruiken is en nowdoc wel.
Echo
Met de echo functie kunnen we een string naar de gebruiker sturen. Strict genomen is echo niet een functie maar een "language construct". Deze language constructs gedragen zich net even anders dan gewonen functies in PHP. Zo kan je sommige, waaronder echo, zonder haakjes gebruiken. De syntax van echo is als volgt:
PHP
Dit houdt in dat de functie één of meerdere strings naar de gebruiker kan sturen. Het is belangrijk om door te hebben dat in het geval van meerdere parameters de haakjes niet om alle parameters kunnen staan. Als je echo namelijk aanroept met haakjes en één parameter gaat PHP er mee om alsof de haakjes bij de parameter horen in plaats van bij de language construct. Dus als je dan haakjes wilt gebruiken met meerdere parameters dan zou je haakjes om elke parameter moeten zetten. Het is echter gebruikelijk om bij de echo functie helemaal geen haakjes te gebruiken. Onder andere om al deze verwarring te vermijden. Hier volgen enkele voorbeelden.
PHP
De laatste twee regels zijn in feite indentiek aan elkaar. In de bovenste worden er meerdere strings als meerdere parameters aan de echo functie meegegeven en in de onderste regel worden meerdere strings samengevoegd en als één parameter aan de functie gegeven. Het resultaat komt op het zelfde neer, maar toch is de onderste manier met een enkele parameter gebruikelijker.
Wanneer je meerdere strings achter elkaar wilt afdrukken is het handiger en iets sneller om dit met een enkel echo statement te doen. Hier moet je echter niet al te druk om maken, want het verschil is minimaal en waarschijnlijk niet eens merkbaar.
Print
Naast echo is er de print functie. Scrict genomen is print ook een language contruct, maar print gedraagt zich toch iets meer als een functie dan echo. Net als bij echo kunnen de haakjes weggelaten worden. Dit is de syntax van print:
PHP
Wat op valt ten opzichte van echo zijn twee dingen. Ten eerste kan print maar één parameter meegegeven worden en ten tweede, misschien wel belangrijker, print returnt een integer. Print zal namelijk altijd 1 returnen. Dit betekend dat print op meer plekken dan echo gebruikt kan worden. Omdat print altijd een waarde teruggeeft en echo dit niet hoeft te doen is print iets langzamer dan echo. Dit verschil in snelheid is echter weer minimaal en zal hoogstwaarschijnlijk niet te merken zijn. Net als bij echo zal PHP wanneer je haakjes gebruikt deze behandelen alsof ze bij de parameter horen. Daarom staan de haakjes in het volgende voorbeeld om print heen geplaatst.
PHP
Conclusie
We hebben gezien dat je een hele hoop dingen op meerdere manieren kan doen en vraagt je misschien af wat je nou wel en niet zou moeten doen. Scrict genomen is dit eigenlijk een kwestie van persoonlijke voorkeur. Echter je wil er misschien ook rekening mee houden dat andere mensen uiteindelijk naar jouw code moeten kijken en er mee moet werken. Ik zal hier dan ook even een overzicht geven van wat wel en niet gebruikelijk is.
In dit artikel wil in ingaan op twee hele belangrijke en erg gerelateerde begrippen binnen PHP. Ik zal het uitgebreid hebben over beide begrippen. Ik hoop hiermee beginners goed op weg te kunnen helpen en ook de PHP’er met iets meer ervaring nog iets nieuws te leren.
Een string is een data type in PHP en vele andere programmeertalen die zich het best laat omschrijven als een serie van karakters of lettertekens. Strings kunnen dus bijvoorbeeld gebruikt worden om woorden of zinnen mee definiëren.
Echo is een belangrijke functie in PHP om strings mee af te drukken. Hierdoor is het een veel gebruikte en vaak onmisbare functie voor iedereen die met PHP programmeert.
Strings
Strings kunnen op vier verschillende manieren gedefinieerd worden:
- Singled Quoted
- Double Quoted
- Heredoc
- Nowdoc
Single Quoted
De simpelste manier is door gebruik te maken van single quotes. Om een string met single quotes te definïeren zetten we de tekenreeks simpelweg tussen single quotes. De string kunnen vervolgens toekennen aan een variabele. Hieronder volgen enkele voorbeelden:
PHP
- Code: Alles selecteren
<?php
$foo = 'Dit is een voorbeeld van een string.';
$bar = 'En dit is er nog een.
Over twee regels zelfs!';
?>
Je zit misschien al wel dat je in de problemen komt al de tekenreeks een single quote bevat. Het zal daardoor overkomen dat de string eerder stopt dan eigenlijk de bedoeling is waardoor je een foutmelding zal krijgen. Gelukkig is dit op te lossen door de single quote te "escapen". Een teken kan je escapen door er een backslash voor te zetten.
Maar stel je nu voor dat het laatste teken in je tekenreeks een backslash is. Deze backslash wordt dus gevolgd door een single quote en er zal gedacht worden dat jij de single quote probeert te escapen. De string houdt vervolgens niet op waar jij dat wil en je zal geheid weer foutmeldingen krijgen. Om dit te voorkomen heeft men afgesproken dat je ook een backslash kan escapen. Dit is overigens niet noodzakelijk wanneer een backslash voor een teken dat niet te escapen is.
PHP
- Code: Alles selecteren
<?php
$es = 'Ik heb \'quotes\' in me';
//Ik heb 'quotes' in me
$ca = 'Ik een back\\slash';
//Ik een back\slash
$pe = 'En ik heb \\beide\'';
//En ik heb \beide'
?>
Het is ook mogelijk twee strings aan elkaar te plakken. Dit staat ook wel bekend als "concatenation" en kan je doen door een punt tussen twee strings te zetten. Wanneer je een ander datatype aan een string probeert te plakken zal PHP automatisch proberen om deze om te zetten naar een string. Je kan ook meerdere strings in één keer aan elkaar plakken. Alle spaties buiten de strings worden natuurlijk genegeerd, maar vaak worden deze toegevoegd om het overzichtelijker te maken.
PHP
- Code: Alles selecteren
<?php
$str1 = 'x ' . 'is scheepsrecht';
//x is scheepsrecht
$str2 = 3 . $str1 . '!' ;
//3x is scheepsrecht!
$str3 = '4 * 5 = ' . (4 * 5);
//4 * 5 = 20
?>
In het tweede voorbeeld zien we dat het getal drie aan twee andere strings geplakt worden. $str1 is immers ook een string. Het getal drie is echter een integer (er staan namelijk geen quotes om) en wordt dus door PHP omgezet naar de string '3' voordat deze aan de andere twee strings geplakt wordt. In het laatste voorbeeld maken we gebruik van haakjes om PHP eerst vier keer vijf uit te laten rekenen. Vervolgens wordt het antwoord daarvan omgezet naar de string '20' en aan de string geplakt. Wanneer dit zonder haakjes geprobeerd wordt gaat dit helemaal mis. PHP zal namelijk het getal 4 aan de string '4 * 5 = ' plakken en vervolgens het resultaat met 5 proberen te vermenigvuldigen en omdat het onmogelijk is een string te vermenigvuldigen geeft PHP een foutmelding.
Double Quoted
Double quoted strings bieden wat extra mogelijkheden over single quoted strings, maar zijn over het algemeen hetzelfde. Double quoted strings kunnen bijvoorbeeld een aantal meer tekens escapen.
- Code: Alles selecteren
\n newline (regelomhaal)
\r carriage return
\t horizontal tab (horizontale tab)
\v vertical tab (verticale tab)
\f form feed
\\ backslash (terugschrap)
\$ dollar sign (dollar teken)
\" double quote (aanhalingsteken)
\[0-7]{1,3} ascii teken op basis van een octale notatie
\x[0-9a-fA-F]{1,2} ascii teken op basis van een hexadecimale notatie
Een drietal voorbeelden:
PHP
- Code: Alles selecteren
<?php
$str1 = "Dit is een regel\nomhaal.";
//Dit is een regel
//omhaal.
$str2 = "Het boek kost \$40.";
//Het boek kost $40.
$str3 = "Om\nhaal" . 'Om\nhaal';
//Om
//haalOm\nhaal
?>
Een belangrijk verschil met single quoted strings is het feit dat je nu een dollar teken moet escapen. Zou je dat niet doen dan gaat PHP er van uit dat je een variabele probeert aan te roepen. Om expliciet het einde van een variabele te kenmerken kan gebruikt worden gemaakt van accolades. De openende accolade kan direct achter het dollar teken staan, maar zet men er over het algemeen direct voor.
PHP
- Code: Alles selecteren
<?php
$bla = '5';
$blaam = 'dawn';
$str1 = 'I awoke at $bla';
//I awoke at $bla
$str2 = "I awoke at $bla";
//I awoke at 5
$str3 = "I awoke at $blaam";
//I awoke at dawn
$str4 = "I awoke at ${bla}am";
//I awoke at 5am
$str5 = "I awoke at {$bla}am";
//I awoke at 5am
$str6 = "I awoke at " . $bla . "am";
//I awoke at 5am
?>
Men moet ook accolades gebruiken om complexe variabele aanroepen te doen zoals:
Heredoc en Nowdoc
Heredoc en nowdoc zijn twee alternative manieren om strings te definiëren. In de realiteit worden ze nauwelijks gebruikt. Ik raad je om het gebruik van deze twee vormen zoveel mogelijk te vermijden, maar ik zal ze voor de volledigheid toch even kort behandelen. Het kan namelijk zo zijn dat je ze toch een keer ergens tegen komt.
Een heredoc string begint met <<< gevolgd door een identifier. Daarna volgt de string en uiteindelijk wordt de string weer afgesloten met de identifier. De identifier moet voldoen aan dezelfde naamgevingsregels als een variabele: hij mag alleen uit letters, getallen en underscores bestaan en moet met een underscore of letter beginnen. Ook is het belangrijk dat de afsluitende identifier helemaal aan het begin van een nieuwe regel staat en er geen tekens tussen de identifier en de puntkomma zitten.
PHP
- Code: Alles selecteren
<?php
$var = "heredoc";
$str = <<<MASTERCODE
Dit is een string
volgens de $var syntax.
MASTERCODE;
//Dit is een string
//volgens de heredoc syntax.
?>
Bij heredoc worden variabelen net als bij de double quoted syntax geëvalueerd. Dit is echter niet het geval bij nowdoc. Nowdoc wordt op de zelfde manier gedefiniëerd als heredoc en is te vergelijken met de single quoted variant van heredoc. Het verschil in syntax is dat de openende identifier tussen enkele aanhalingstekens staat.
PHP
- Code: Alles selecteren
<?php
$var = "nowdoc";
$str = <<<'MASTERCODE'
Dit is een string
volgens de $var syntax.
MASTERCODE;
//Dit is een string
//volgens de $var syntax.
?>
Een ander opmerkelijk verschil tussen heredoc en nowdoc is dat heredoc niet in klassen te gebruiken is en nowdoc wel.
Echo
Met de echo functie kunnen we een string naar de gebruiker sturen. Strict genomen is echo niet een functie maar een "language construct". Deze language constructs gedragen zich net even anders dan gewonen functies in PHP. Zo kan je sommige, waaronder echo, zonder haakjes gebruiken. De syntax van echo is als volgt:
PHP
- Code: Alles selecteren
void echo( string $args1 [, string $...] );
Dit houdt in dat de functie één of meerdere strings naar de gebruiker kan sturen. Het is belangrijk om door te hebben dat in het geval van meerdere parameters de haakjes niet om alle parameters kunnen staan. Als je echo namelijk aanroept met haakjes en één parameter gaat PHP er mee om alsof de haakjes bij de parameter horen in plaats van bij de language construct. Dus als je dan haakjes wilt gebruiken met meerdere parameters dan zou je haakjes om elke parameter moeten zetten. Het is echter gebruikelijk om bij de echo functie helemaal geen haakjes te gebruiken. Onder andere om al deze verwarring te vermijden. Hier volgen enkele voorbeelden.
PHP
- Code: Alles selecteren
<?php
$str = 'Nog een voorbeeld.';
echo("Dit is een voorbeeld.");
echo $str;
echo 'Dit ', 'ziet ', 'de ', 'gebruiker.';
echo 'Dit ' . 'ziet ' . 'de ' . 'gebruiker.';
?>
De laatste twee regels zijn in feite indentiek aan elkaar. In de bovenste worden er meerdere strings als meerdere parameters aan de echo functie meegegeven en in de onderste regel worden meerdere strings samengevoegd en als één parameter aan de functie gegeven. Het resultaat komt op het zelfde neer, maar toch is de onderste manier met een enkele parameter gebruikelijker.
Wanneer je meerdere strings achter elkaar wilt afdrukken is het handiger en iets sneller om dit met een enkel echo statement te doen. Hier moet je echter niet al te druk om maken, want het verschil is minimaal en waarschijnlijk niet eens merkbaar.
Naast echo is er de print functie. Scrict genomen is print ook een language contruct, maar print gedraagt zich toch iets meer als een functie dan echo. Net als bij echo kunnen de haakjes weggelaten worden. Dit is de syntax van print:
PHP
- Code: Alles selecteren
int print( string $arg );
Wat op valt ten opzichte van echo zijn twee dingen. Ten eerste kan print maar één parameter meegegeven worden en ten tweede, misschien wel belangrijker, print returnt een integer. Print zal namelijk altijd 1 returnen. Dit betekend dat print op meer plekken dan echo gebruikt kan worden. Omdat print altijd een waarde teruggeeft en echo dit niet hoeft te doen is print iets langzamer dan echo. Dit verschil in snelheid is echter weer minimaal en zal hoogstwaarschijnlijk niet te merken zijn. Net als bij echo zal PHP wanneer je haakjes gebruikt deze behandelen alsof ze bij de parameter horen. Daarom staan de haakjes in het volgende voorbeeld om print heen geplaatst.
PHP
- Code: Alles selecteren
<?php
$isJarig = true;
$isJarig && (print "Gefeliciteerd met je verjaardag!");
?>
Conclusie
We hebben gezien dat je een hele hoop dingen op meerdere manieren kan doen en vraagt je misschien af wat je nou wel en niet zou moeten doen. Scrict genomen is dit eigenlijk een kwestie van persoonlijke voorkeur. Echter je wil er misschien ook rekening mee houden dat andere mensen uiteindelijk naar jouw code moeten kijken en er mee moet werken. Ik zal hier dan ook even een overzicht geven van wat wel en niet gebruikelijk is.
- Gebruik over het algemeen echo in plaats van print.
- Gebruik single quoted of doubled quoted syntax in plaats van heredoc of nowdoc.
- Stop geen variabelen in je syntax, maar plak strings en variabelen aan elkaar door middel van concatenation.
- Over het algemeen gebruikt men double quotes in plaats van single quotes, maar wanneer de tekenreeks veel double quotes bevat (bijvoorbeeld HTML) kan je natuurlijk beter de single quoted syntax gebruiken.
Laatst gewijzigd door Fluring Lifes op 02 Okt 2009 06:30, in totaal 8 keer gewijzigd.
Reden: Typefouten hersteld en een kleine toevoeging
Reden: Typefouten hersteld en een kleine toevoeging
- Mauz
- Globale moderator
- Berichten: 963
- Geregistreerd: 24 Okt 2005 18:41
- Woonplaats: Groningen
Re: [PHP] Strings en echo
Mooie tutorial. Worden inderdaad veel fouten op gemaakt.
Spamkoning!!! - Ja dat is mijn koeling 
- BNC
- Spamkoning
- Berichten: 329
- Geregistreerd: 18 Dec 2006 13:31
- Woonplaats: België
2 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast