Jelmerhollan schreef:
Boeken zijn slecht heb ik gehoord. Zijn heel snel out-dated. klopt ook wel, ik heb een php 5.0 boek van Peter Kassenaar. Maar daar staat dat je bijvoorbeeld:
[..code..]
mag doen, maar dat mag allang niet meer, Het moet nu zo:
[..code..]
Je moet 'm nou escapen met zo'n '.' [punt].
Daar wil ik toch even op reageren om misverstanden tegen te gaan.
Dat heet
concateneren, escapen is het "onschadelijk" maken (\", \', \\, ..) of aanduiden van speciale tekens (\t, \r, \n, ...). En die methode is helemaal niet verkeerd, neem bijvoorbeeld even een kijkje naar onderstaande code.
Hoewel de utopische manier volgens een groot deel van de scripters nog steeds als bovenstaand is, is volgende code ook nog steeds in orde:
Om eens en voor altijd het verschil tussen deze twee aanhalingstekens duidelijk te maken zal ik er even wat verder op ingaan.
Over het algemeen wordt de voorkeur gegeven aan de combinatie van concatenatie en enkele aanhalingstekens ('). Strings die tussen enkele aanhalingstekens staan, zullen letterlijk geïnterpreteerd worden door de PHP parser en bijgevolg win je hier enkele microseconden parsetijd mee (afhankelijk van hoeveel keer je dit toepast in een script, natuurlijk). Het gebruik van enkele aanhalingstekens biedt ook het voordeel dat je niet alle dubbele aanhalingstekens die je gebruikt in HTML code zal moeten escapen. Dit draagt dan weer bij aan de overzichtelijkheid van je code.
$string = '<table cellspacing="2" cellpadding="1" id="tabel" class="tableclass" border="1" style="border-collapse: collapse;">';
// Versus
$string = "<table cellspacing=\"2\" cellpadding=\"1\" id=\"tabel\" class=\"tableclass\" border=\"1\" style=\"border-collapse: collapse;\">";
$string = '<table cellspacing="2" cellpadding="1" id="tabel" class="tableclass" border="1" style="border-collapse: collapse;">';
// Versus
$string = "<table cellspacing=\"2\" cellpadding=\"1\" id=\"tabel\" class=\"tableclass\" border=\"1\" style=\"border-collapse: collapse;\">";
Dat alle strings tussen enkele aanhalingstekens letterlijk worden geïnterpreteerd kunnen we beschouwen als zowel een voordeel als een nadeel. Hét nadeel is natuurlijk dat je alle speciale tekens zoals variabelen, tabs, nieuwe regels, enzovoort apart zal moeten concateneren, voorbeeld:
$string = 'Dit is een regel.' . "\n" . 'Dit is een andere regel op een nieuwe lijn.';
// Versus
$string = "Dit is een regel.\nDit is een andere regel op een nieuwe lijn.";
$string = 'Dit is een regel.' . "\n" . 'Dit is een andere regel op een nieuwe lijn.';
// Versus
$string = "Dit is een regel.\nDit is een andere regel op een nieuwe lijn.";
Het is niet altijd aan te raden om variabelen te concateneren wanneer je er tientallen moet verwerken op één regel. Dit is niet bepaald bevorderend voor de overzichtelijkheid.
Bijvoorbeeld:
$string = '<a href="' . $root_path . '/' . $directory . '/' . $filename . '.' . $extension . '">' . $title . '</a>';
// Versus
$string = "<a href=\"$root_path/$directory/$filename.$extension\">$title</a>";
$string = '<a href="' . $root_path . '/' . $directory . '/' . $filename . '.' . $extension . '">' . $title . '</a>';
// Versus
$string = "<a href=\"$root_path/$directory/$filename.$extension\">$title</a>";
Hopelijk heeft dit wat duidelijkheid kunnen scheppen.