Verschil met of zonder echo

Overzicht Reageren

Mui ter

Mui ter

30/08/2009 19:34:00
Quote
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ?>" />&nbsp;[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)
PHP script in nieuw venster Selecteer het PHP script
1
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>"
;
?>
Gewijzigd op 01/01/1970 01:00:00 door Mui ter
 
PHP hulp

PHP hulp

03/09/2010 01:26:57
Gesponsorde koppelingen:
 
Milo

Milo

30/08/2009 19:48:00
Quote
ehm ik zou gewoon iedere regel appart echoën vind ik netter en anders opmaak b
 
Flip van Rijn

Flip van Rijn

30/08/2009 19:50:00
Quote
@Milo: Nee!
@Muiter: Opmaak A is eigenlijk het overzichtelijkst.
 
Kevin Tuns

Kevin Tuns

30/08/2009 19:56:00
Quote
ik gebruik ongeveer die van A, maar denk dat je een beetje slordig bent geweest met het opstellen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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; ?>" />&nbsp;<?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.
 
Hall Leeuwenburgh

Hall Leeuwenburgh

31/08/2009 00:17:00
Quote
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php if ... {

echo HTML code

}

etc

?>
 
Zero XT

Zero XT

31/08/2009 00:18:00
Quote
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.


Waarom zo een felle nee op Milo's antwoord Gamer13? Onderbouw even je reden aub
 
Willem vp

Willem vp

31/08/2009 01:01:00
Quote
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.
 
Flip van Rijn

Flip van Rijn

31/08/2009 12:08:00
Quote
HellRazer schreef op 31.08.2009 00:18:
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.


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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
?>

of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>"
;
?>


EDIT: 461 bytes t.o.v. 413 bytes...
Gewijzigd op 01/01/1970 01:00:00 door Flip van Rijn
 
Douwe

Douwe

31/08/2009 12:19:00
Quote
En de PHP parser krijgt het moeilijker, omdat deze in plaats van één keer, 13 keer echo moet uitvoeren.
 
Robert Deiman

Robert Deiman

31/08/2009 12:34:00
Quote
En als je het tussen enkele quotes plaatst, gaat de tekst niet door de parser... Nog sneller voor de verwerking ook.
 
Willem vp

Willem vp

31/08/2009 19:06:00
Quote
Robert_Deiman schreef op 31.08.2009 12:34:
En als je het tussen enkele quotes plaatst, gaat de tekst niet door de parser...
Wat je zegt, klopt niet. Alles gaat door de parser, alleen wordt tussen enkele quotes geen variable expansion uitgevoerd.
Quote:
Nog sneller voor de verwerking ook.
*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.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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

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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>
Gewijzigd op 01/01/1970 01:00:00 door Willem vp
 
Mui ter

Mui ter

31/08/2009 20:26:00
Quote
Leuk om de verschillende inzichten te lezen.
Wat gebeurt er met EOT Willem vp?
 
Willem vp

Willem vp

31/08/2009 20:37:00
Quote
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$str
= <<<BLA
Hoi, ik ben een stringetje
BLA
;
?>

Het zal voornamelijk nuttig zijn wanneer je met grote lappen tekst (HTML-code) werkt. Als je hetzelfde doet met quotes
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$str
= '
Hoi, ik ben een stringetje
'
;
?>

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
 
Overdatum puntNL

Overdatum puntNL

31/08/2009 21:39:00
Quote
Je kan ook ipv:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_SERVER['PHP_SELF'] ?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$_SERVER['PHP_SELF'] ?>
doen :"P
 
Afra ca

Afra ca

31/08/2009 22:24:00
Quote
Jey schreef op 31.08.2009 21:39:
Je kan ook ipv:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_SERVER['PHP_SELF'] ?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$_SERVER['PHP_SELF'] ?>
doen :"P


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
 
Mui ter

Mui ter

05/09/2009 11:35:00
Quote
Bedankt voor de uitleg Willem vp.
 
Hall Leeuwenburgh

Hall Leeuwenburgh

11/09/2009 20:19:00
Quote
Wat bedoel je met "want het dereferencen van een array is ook relatief inefficiënt." ?
 
Willem vp

Willem vp

12/10/2009 23:09:00
Quote
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.
 



Overzicht Reageren