Verschil met of zonder echo
Ik maak gebruik van diverse pagina's die ik met veel hulp van hier heb kunnen maken. Echter ik heb daar 2 verschillende opmaken inzitten.
Zitten er bepaalde voor- of nadelen aan en welke geniet jullie voorkeur?
Opmaak A
Opmaak B
Zitten er bepaalde voor- of nadelen aan en welke geniet jullie voorkeur?
Opmaak A
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
<fieldset>
<legend align="center">
Nieuwe dikte
</legend>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<table align="center" class="bd" border="0" cellspacing="1" cellpadding="5" width="500">
<tr>
<td>Dikte:</td>
<td><input type="text" name="dikte" value="<?php echo $dikte ?>" /> [code]<?php if($error_dikte == "ja"){ $error_omschr = $error_omschr_dikte; include('includes/input_error.php'); } ?></td>
</tr>
<tr>
<td><input type="submit" value="Maak dikte aan" /></td>
<td><input type="reset" value="Opnieuw" /></td>
</tr>
<tr>
<td></td>
<td><a href="<?php echo $_SESSION['last_page'] ?>">Ga terug naar <?php echo $_SESSION['last_page_name'] ?></a></td>
</tr>
</fieldset>
</form>
?>
<fieldset>
<legend align="center">
Nieuwe dikte
</legend>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<table align="center" class="bd" border="0" cellspacing="1" cellpadding="5" width="500">
<tr>
<td>Dikte:</td>
<td><input type="text" name="dikte" value="<?php echo $dikte ?>" /> [code]<?php if($error_dikte == "ja"){ $error_omschr = $error_omschr_dikte; include('includes/input_error.php'); } ?></td>
</tr>
<tr>
<td><input type="submit" value="Maak dikte aan" /></td>
<td><input type="reset" value="Opnieuw" /></td>
</tr>
<tr>
<td></td>
<td><a href="<?php echo $_SESSION['last_page'] ?>">Ga terug naar <?php echo $_SESSION['last_page_name'] ?></a></td>
</tr>
</fieldset>
</form>
?>
Opmaak B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
echo "<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>";
?>
echo "<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>";
?>
Gewijzigd op 01/01/1970 01:00:00 door Mui ter
Gesponsorde koppelingen:
ik gebruik ongeveer die van A, maar denk dat je een beetje slordig bent geweest met het opstellen:
Maarja.. dat ff terzijde. Iedereen heeft natuurlijk zijn eigen stijl en die veranderd vaak ook nog naarmate ze meer ervaring krijgen en zich ontwikkelen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<fieldset>
<legend align="center">
Nieuwe dikte
</legend>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table align="center" class="bd" border="0" cellspacing="1" cellpadding="5" width="500">
<tr>
<td>Dikte:</td>
<td><input type="text" name="dikte" value="<?php echo $dikte; ?>" /> <?php if($error_dikte == "ja"){ $error_omschr = $error_omschr_dikte; include('includes/input_error.php'); } ?></td>
</tr>
<tr>
<td><input type="submit" value="Maak dikte aan" /></td>
<td><input type="reset" value="Opnieuw" /></td>
</tr>
<tr>
<td></td>
<td><a href="<?php echo $_SESSION['last_page']; ?>">Ga terug naar <?php echo $_SESSION['last_page_name']; ?></a></td>
</tr>
</table>
</form>
</fieldset>
<legend align="center">
Nieuwe dikte
</legend>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table align="center" class="bd" border="0" cellspacing="1" cellpadding="5" width="500">
<tr>
<td>Dikte:</td>
<td><input type="text" name="dikte" value="<?php echo $dikte; ?>" /> <?php if($error_dikte == "ja"){ $error_omschr = $error_omschr_dikte; include('includes/input_error.php'); } ?></td>
</tr>
<tr>
<td><input type="submit" value="Maak dikte aan" /></td>
<td><input type="reset" value="Opnieuw" /></td>
</tr>
<tr>
<td></td>
<td><a href="<?php echo $_SESSION['last_page']; ?>">Ga terug naar <?php echo $_SESSION['last_page_name']; ?></a></td>
</tr>
</table>
</form>
</fieldset>
Maarja.. dat ff terzijde. Iedereen heeft natuurlijk zijn eigen stijl en die veranderd vaak ook nog naarmate ze meer ervaring krijgen en zich ontwikkelen.
Het heeft te maken met onnodig HTML door de PHP parser laten gaan als dat niet nodig is. En dat is dus niet nodig want alleen de PHP hoeft aan de server kant geinterpreteert te worden. Opmaakt A is dus de beste. Pas als je met if of if en else gaat werken kun je delen HTML met echo weergeven
Dus:
Dus:
Milo schreef op 30.08.2009 19:48:
ehm ik zou gewoon iedere regel appart echoën vind ik netter en anders opmaak b
GaMer13 schreef op 30.08.2009 19:50:
@Milo: Nee!
@Muiter: Opmaak A is eigenlijk het overzichtelijkst.
@Muiter: Opmaak A is eigenlijk het overzichtelijkst.
Waarom zo een felle nee op Milo's antwoord Gamer13? Onderbouw even je reden aub
Ik denk dat je moeilijk kan zeggen dat opmaak A beter is dan B of andersom, dat hangt van heel veel factoren af.
Ruwweg kun je zeggen dat bij opmaak A de HTML-code gemakkelijker te onderhouden is, en bij opmaak B de PHP-code. E.e.a. hangt achter ook weer af van de verhouding tussen HTML en PHP of het aantal keer dat je een context-switch moet maken.
Aangezien dit een PHP-forum is, zou je zelfs kunnen stellen dat opmaak B de voorkeur geniet ;-)
Zelf zou ik zeggen: zorg dat je beide technieken beheerst en gebruik datgene wat je in een bepaalde situatie het prettigst, duidelijkst of best onderhoudbaar vindt. Vooral als je iets schrijft voor eigen gebruik is het fijn als je je er zelf prettig bij voelt; je moet je niets laten aanpraten door mensen die een bepaalde methode prettig vinden of niet snappen hoe die werkt.
Als je programmeert binnen een team is het uiteraard een ander verhaal; dan zijn er vaak richtlijnen waar je je aan dient te houden. En dan maakt het niet uit om te weten welke methode het "best" is, want als de richtlijnen iets anders bepalen, kun je die "betere" methode toch niet gebruiken.
Ruwweg kun je zeggen dat bij opmaak A de HTML-code gemakkelijker te onderhouden is, en bij opmaak B de PHP-code. E.e.a. hangt achter ook weer af van de verhouding tussen HTML en PHP of het aantal keer dat je een context-switch moet maken.
Aangezien dit een PHP-forum is, zou je zelfs kunnen stellen dat opmaak B de voorkeur geniet ;-)
Zelf zou ik zeggen: zorg dat je beide technieken beheerst en gebruik datgene wat je in een bepaalde situatie het prettigst, duidelijkst of best onderhoudbaar vindt. Vooral als je iets schrijft voor eigen gebruik is het fijn als je je er zelf prettig bij voelt; je moet je niets laten aanpraten door mensen die een bepaalde methode prettig vinden of niet snappen hoe die werkt.
Als je programmeert binnen een team is het uiteraard een ander verhaal; dan zijn er vaak richtlijnen waar je je aan dient te houden. En dan maakt het niet uit om te weten welke methode het "best" is, want als de richtlijnen iets anders bepalen, kun je die "betere" methode toch niet gebruiken.
HellRazer schreef op 31.08.2009 00:18:
Waarom zo een felle nee op Milo's antwoord Gamer13? Onderbouw even je reden aub
Milo schreef op 30.08.2009 19:48:
ehm ik zou gewoon iedere regel appart echoën vind ik netter en anders opmaak b
GaMer13 schreef op 30.08.2009 19:50:
@Milo: Nee!
@Muiter: Opmaak A is eigenlijk het overzichtelijkst.
@Muiter: Opmaak A is eigenlijk het overzichtelijkst.
Waarom zo een felle nee op Milo's antwoord Gamer13? Onderbouw even je reden aub
Omdat je onnodige tekst toevoegt aan je PHP code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
echo "<fieldset>";
echo "<legend align=center>";
echo "De gegevens zijn met succes ingevoerd!</legend>";
echo "<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>";
echo "<tr>";
echo "<td>Dikte:</td>";
echo "<td>$dikte</td>";
echo "</tr>";
echo "<tr>";
echo "<td></td>";
echo "<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>";
echo "</tr>";
echo "</fieldset>";
?>
echo "<fieldset>";
echo "<legend align=center>";
echo "De gegevens zijn met succes ingevoerd!</legend>";
echo "<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>";
echo "<tr>";
echo "<td>Dikte:</td>";
echo "<td>$dikte</td>";
echo "</tr>";
echo "<tr>";
echo "<td></td>";
echo "<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>";
echo "</tr>";
echo "</fieldset>";
?>
of
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
echo "<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>";
?>
echo "<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>";
?>
EDIT: 461 bytes t.o.v. 413 bytes...
Gewijzigd op 01/01/1970 01:00:00 door Flip van Rijn
En de PHP parser krijgt het moeilijker, omdat deze in plaats van één keer, 13 keer echo moet uitvoeren.
En als je het tussen enkele quotes plaatst, gaat de tekst niet door de parser... Nog sneller voor de verwerking ook.
Robert_Deiman schreef op 31.08.2009 12:34:
Wat je zegt, klopt niet. Alles gaat door de parser, alleen wordt tussen enkele quotes geen variable expansion uitgevoerd.En als je het tussen enkele quotes plaatst, gaat de tekst niet door de parser...
Quote:
*Zucht* Wat blijven sommige mensen toch hardnekkig vasthouden aan een bewering die nergens op slaat. Ik kan me herinneren dat ik dit in 2005 al eens onderuit heb geschopt. Blijkbaar moet ik het nog maar eens doen.Nog sneller voor de verwerking ook.
Ik heb in een for-loopje 5 miljoen maal een string van 320 tekens toegekend aan een variabele. Dit for-loopje heb ik een keer met enkele quotes en een keer met dubbele quotes uitgevoerd. Volgens jou zou het loopje met de enkele quotes sneller moeten zijn. Ik heb beide loopjes 4x uitgevoerd:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Timings (in sec):
Met ' Met "
5,47392 5,10862
5,11300 5,11169
5,07935 5,10493
5,10174 5,09745
Met ' Met "
5,47392 5,10862
5,11300 5,11169
5,07935 5,10493
5,10174 5,09745
Surprise! De loop met dubbele quotes was 3 van de 4 keer zelfs sneller! Overigens moet je soms zelfs naar de derde decimaal kijken om uberhaupt verschil te kunnen zien. Als je dat afzet tegen de cumulatieve string-grootte van 1,49 GB per for-loop kom je uit op een verschil van 0 voor elk willekeurig script dat je maar kan bedenken.
Oftewel: het maakt voor de snelheid niet uit of je enkele of dubbele quotes gebruikt.
Je kan veel beter je queries optimaliseren, daar valt veel meer in te winnen. Of desnoods kun je nog kijken of je bepaalde (statische) array-elementen vaak gebruikt en die in een string kopiëren, want het dereferencen van een array is ook relatief inefficiënt.
En, ik heb het al vaker gezegd, de meeste performancewinst haal je door al dat OOP-geneuzel overboord te gooien. Voor websites is OOP helemaal niet interessant.
Ik mis bovenstaande discussie overigens de heredoc-notatie, die wat mij betreft nog handiger is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
echo <<< EOT
<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>
EOT;
?>
echo <<< EOT
<fieldset>
<legend align=center>
De gegevens zijn met succes ingevoerd!</legend>
<table align=center class=bd border=0 cellspacing=1 cellpadding=5 width=500>
<tr>
<td>Dikte:</td>
<td>$dikte</td>
</tr>
<tr>
<td></td>
<td><a href=\"javascript:history.go(-2)\" title=\"Ga terug naar de lijst\">Terug naar lijst</a></td>
</tr>
</fieldset>
EOT;
?>
Gewijzigd op 01/01/1970 01:00:00 door Willem vp
EOT is niet meer dan een marker. PHP zal alle tekst tussen <<< EOT en EOT echo'en (of wat je dan ook wilt doen met de string). De regels waarop de EOT-markers staan worden niet meegenomen. Overigens hoeven de markers niet per se EOT te heten. EOT of EOD zijn meer een soort de facto standaard (End Of Text/Data).
Op deze manier kun je ook variabelen een waarde geven:
Het zal voornamelijk nuttig zijn wanneer je met grote lappen tekst (HTML-code) werkt. Als je hetzelfde doet met quotes
krijg je namelijk een newline aan het begin en het eind die je misschien niet wilt hebben.
Op deze manier kun je ook variabelen een waarde geven:
Het zal voornamelijk nuttig zijn wanneer je met grote lappen tekst (HTML-code) werkt. Als je hetzelfde doet met quotes
krijg je namelijk een newline aan het begin en het eind die je misschien niet wilt hebben.
Gewijzigd op 01/01/1970 01:00:00 door Willem vp
Jey schreef op 31.08.2009 21:39:
Nee, want bij de tweede situatie gebruik je short tags, wat sowiezo niet wordt ondersteund door heel wat servers, en echo je, wat je in je eerste stukje code niet doet.
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
Daarmee bedoel ik dat het meer tijd kost om de waarde op te halen van een array-element (zoals $array[28]) dan van een gewone variabele (zoals $waarde). Dat komt, omdat een array een "complexere" datastructuur is en daardoor meer overhead genereert.
In principe is het zo dat als je een bepaalde array-waarde meer dan 2x nodig hebt, het iets sneller is om die array-waarde eerst toe te kennen aan een gewone variabele. Ik praat dan overigens over microseconden. Het wordt dus pas interessant als je diezelfde waarde steeds weer nodig hebt in een loopje dat je een paar duizend keer uitvoert.
In het kader van leesbaarheid is het soms ook beter om die array-dereference gewoon te laten staan. Het is aan de programmeur om in te schatten wat hij in een bepaalde situatie het best kan doen.
In principe is het zo dat als je een bepaalde array-waarde meer dan 2x nodig hebt, het iets sneller is om die array-waarde eerst toe te kennen aan een gewone variabele. Ik praat dan overigens over microseconden. Het wordt dus pas interessant als je diezelfde waarde steeds weer nodig hebt in een loopje dat je een paar duizend keer uitvoert.
In het kader van leesbaarheid is het soms ook beter om die array-dereference gewoon te laten staan. Het is aan de programmeur om in te schatten wat hij in een bepaalde situatie het best kan doen.


