PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ein paar grundlegende fragen


Gweilo
06.10.2003, 18:11:58
Hi leutz.

Ich habe da mal einige Fragen zu gewissen Schreibweisen und deren Vorteile. Ich möchte von euch wissen welche der Schreibweisen besser/schneller ist und vorallem warum! (oder ob es keine rolle spielt)

1)
htmltest<?=$phpvar?>htmltext
htmltest<? echo $phpvar; ?>htmltext
htmltest<?PHP echo $phpvar; ?>htmltext

Brauche ich jedes mal beim aufrufen <?PHP zu schreiben? Alle 3 möglichkeiten funktionieren, nun möchte ich wissen, welche ist besser/schneller, oder welche wird von PHP empfohlen?


2)
if ($bla) echo "1";
if ($bla) { echo "1"; }

Habe mal hier im Forum gelesen, dass man die Klammern nicht weglassen soll. Klar, es verleitet zu ungenauem Programmieren, aber gibt es einen "richtigen" Grund, warum man die Klammern nicht weglassen soll?


3)
echo "Dies ist eine Variable: $var.";
echo "Dies ist eine Variable: ".$var.". ";

Ich habe gelesen, dass die 2. Variante schneller ist, stimmt das?

c4
06.10.2003, 18:56:22
1)
htmltest<?=$phpvar?>htmltext
htmltest<? echo $phpvar; ?>htmltext
htmltest<?PHP echo $phpvar; ?>htmltext

Brauche ich jedes mal beim aufrufen <?PHP zu schreiben? Alle 3 möglichkeiten funktionieren, nun möchte ich wissen, welche ist besser/schneller, oder welche wird von PHP empfohlen?
Fangen wir mal anders an: In der php.ini sollte short_open_tag auf Off stehen.
Prinzipiell ist es egal, was Du nutzt, aber <? kann mit XML verwechselt werden und das muss ja nicht sein. Also fordert man <?php und schon klappt auch <?= nicht mehr.


2)
if ($bla) echo "1";
if ($bla) { echo "1"; }

Habe mal hier im Forum gelesen, dass man die Klammern nicht weglassen soll. Klar, es verleitet zu ungenauem Programmieren, aber gibt es einen "richtigen" Grund, warum man die Klammern nicht weglassen soll?
Noch sauberer ist das:if ($bla) {
echo "1";
} Bei php.net gibt's dazu auch ein paar 'Vorschriften': http://pear.php.net/manual/en/standards.php
Es dient einfach mal der Übersichtlichkeit. Falls Du mal wieder eine Frage hast, dann danke mindestens ich Dir dafür, wenn Du { und } nutzt.


3)
echo "Dies ist eine Variable: $var.";
echo "Dies ist eine Variable: ".$var.". ";

Ich habe gelesen, dass die 2. Variante schneller ist, stimmt das?
Nein. Das wäre theoretisch schneller: echo 'Dies ist eine Variable: '.$var.'. '; Alles zwischen " wird von PHP geparsed, frisst also mehr Zeit. Das zwischen ' wird einfach ausgegeben, genau wie pures HTML-Zeugs außerhalb von <?php ... ?>
Da sich das aber alles nicht viel nimmt vertrete ich die Meinung, dass es leserlich sein muss und nicht geschwindigkeitsoptimiert.

Gweilo
06.10.2003, 20:18:26
Danke Dir!

AlexWeber
07.10.2003, 02:05:45
Hi,
ich bin kein großartiger Programmierer, aber ich werde fersuchen deine Wragen verständlich beantworten.
Ich habe ein guten C/C++ Lerer und so hat er mir die sahen erklärt...

1)
htmltest<?=$phpvar?>htmltext
htmltest<? echo $phpvar; ?>htmltext
htmltest<?PHP echo $phpvar; ?>htmltext

Brauche ich jedes mal beim aufrufen <?PHP zu schreiben? Alle 3 möglichkeiten funktionieren, nun möchte ich wissen, welche ist besser/schneller, oder welche wird von PHP empfohlen?
----------------------------------------------------------------------
wenn du erwas abfragen wilst oder sonst was in der Richtung, dann brauchst du <?php if(Anweisung); ?>
wenn du <?= $Variable; ?> heist nichts anderes als
<?php echo $Variable; ?> oder bzw. <?php print $Variable; ?> das heist dass du mit der <?= ?> schreibweise einfach weniger zu schreiben hast und damit deine Code übersichtlicher und leichter machst. Einen anderen unterschied kenne ich nicht...
----------------------------------------------------------------------

2)
if ($bla) echo "1";
if ($bla) { echo "1"; }

Habe mal hier im Forum gelesen, dass man die Klammern nicht weglassen soll. Klar, es verleitet zu ungenauem Programmieren, aber gibt es einen "richtigen" Grund, warum man die Klammern nicht weglassen soll?
----------------------------------------------------------------------
Wenn nach der if() nur eine Anweisung gibt dann kann man ohne klamer schreiben z.B:

if($Vorname == "Alex") -->Wenn $Vorname gleich "Alex"
$Nachname = "Weber"; -->dann ist $Nachname "Weber"
else -->Wenn $Vorname nicht gleich "Alex"
$Nachname_2 = "Mueler"; -->dann ist $Nachname_2 "Mueler"

aber wenn es heist dass 2 oder mehr Anweisungen nach dem if() gemacht werden müssen, dann muss du klamer machen. Du kans aber im else Fahl keine Klamer machen wenn da nur eine Anweisung ist...

if(Bedienung){
Anweisung1;
Anweisung2;
}
else
Anweisung3;

genau so wie if() ist es mit dem for(), while() und switch() Befehlen
es kann z.B. so aussehen:

if($vari==10)
for($i=0; $vari<=$i; $i++) -->$i++ gleicht $i=$i+1; $i-- genau so
while($vari!=0)
$vari--;
das gleicht
if($vari==10){
for($i=0; $vari<=$i; $i++){
while($vari!=0){
$vari--;
}
}
} --> Übersichtlicher??? Schon, aber länger und mann kann fergessen eine Klamer zu zumachen. Also unnotige Fehlerquelle, also immer wenn es gehet benutze ich die 1. Variante...
----------------------------------------------------------------------

3)
echo "Dies ist eine Variable: $var.";
echo "Dies ist eine Variable: ".$var.". ";

Ich habe gelesen, dass die 2. Variante schneller ist, stimmt das?
----------------------------------------------------------------------
print "bla bla bla...".$variable." bla bla bla...";
print "bla bla bla...$variable bla bla bla...";
Die sachen unterscheiden sich nur in der Schreibweise, sonst nichts...
ABER abundzu muss man die 1. Variante nehmen, da die 2. nicht funktionieren wird! Das passiert in den Fählen wie
z.B.:
$VARIABLE="Inhalt";
print "$VARIABLEbla_bla_bla"; -->Das wird nicht functionieren weil die function print nach der Variable $VARIABLEbla suchen wird die nicht existiert, stadt die Variable $VARIABLE zu nehmen...
In solchen Fählen hilft stadt
print "$VARIABLEbla_bla_bla";
print $VARIABLE."bla_bla_bla"; zu schreiben.
aber wenn es so aussehen soll wie z.B:
print "bla_bla_bla".$VARIABLE."/bla_bla_bla"; --> dann konte man schreiben
print "bla_bla_bla$VARIABLE/bla_bla_bla"; --> Wird genau das gleiche sein...
P.S.: die function print "text"; oder printf "text"; entspricht der Function echo "text";
----------------------------------------------------------------------
Ein Tip: ich weiß nicht ob du deis weißt, aber du kanst auch so was mit PHP machen:
z.B.:
<?php
if(Bedienung){
?>
HTML-Text
oder
JavaScript
<?php
}
else {
?>
HTML-Text
oder
sonst was.
<?php } ?>

Ich hoffe dass meine Erklärung verständlich war und dass die Mühe nicht um sonst war. Auch wollte ich mich endschuldigen für die Gramatische Fehler im Text, ich bin kein Deutscher sondern komme aus Kasachstan und bin seit nur 4,5 Jahren hier...
Wenn bei dir noch irgend welche fragen kommen, dann kannst du direkt mir schreiben mein e-mail: info@rus-burgkirchen.de . Ich weiß wie schwer das ist aleine mit Programmieren anfangen, und deswegen wurde ich dir gerne helfen...........

viele Grüße,
Alex Weber...

c4
07.10.2003, 07:29:57
ABER abundzu muss man die 1. Variante nehmen, da die 2. nicht funktionieren wird! Das passiert in den Fählen wie
z.B.:
$VARIABLE="Inhalt";
print "$VARIABLEbla_bla_bla"; -->Das wird nicht functionieren weil die function print nach der Variable $VARIABLEbla suchen wird die nicht existiert, stadt die Variable $VARIABLE zu nehmen...
In solchen Fählen hilft stadt
print "$VARIABLEbla_bla_bla";
print $VARIABLE."bla_bla_bla"; zu schreiben.
aber wenn es so aussehen soll wie z.B:
print "bla_bla_bla".$VARIABLE."/bla_bla_bla"; --> dann konte man schreiben
print "bla_bla_bla$VARIABLE/bla_bla_bla"; --> Wird genau das gleiche sein... Innerhalb von Strings kann man es so machen:echo "Das ist ein Wert aus einem Array: {$arr["feld"][0]['feld']} - cool, wa? :)"; Ob man auf diese Weise auch Rechnungen intgrieren kann weiß ich nicht, hab ich noch nicht getestet.

RDJ
07.10.2003, 11:41:43
nochwas zu den if anweisungen.... man kann genausogut (in manchen fällen)


switch($var)
{

case wert : tuedies ; break ;
case wert2 : teuedas ; break ;
default : tuenix ; break ;
}


nehmen

sourcecode
07.10.2003, 11:43:34
Nein, es geht nicht, innerhalb der geschweiften Klammer etwas zu berechnen. Sie ist wirklich nur zur Variablenausgabe gedacht und ist in speziell drei Fällen erforderlich:

1) dem schon erwähnten: wenn direkt nach der variable ein alphanumerisches zeichen oder ein unterstrich folgen soll (denn diese sind die zeichen, die man für variablennamen verwenden darf), damit wirklich nur die gewünschte variable interpretiert wird, und nicht alles bis zum ersten ungültigen zeichen

2) Wenn man ein mehrdimensionales Array ausgeben will:echo "$Array[0][0]"; // würde den Inhalt von $Array[0] + "[0]" ausgeben
echo "{$Array[0][0]}"; // würde den Inhalt von $Array[0][0] ausgeben

3) Wenn man ein assoziativem Array ausgeben will: echo "$Array[Name]"; // Bedenke: Du verwendest hier nicht den String "Name", sondern die Konstante, die nur dann mit dem String identisch ist, wenn sie so definiert oder garnicht definiert und vom PHP-Interpreter so vermutet wurde (mit entsprechender Notice-Meldung im Errorlog). Also schreib das so nur, wenn die Konstante definiert ist, sonst in Hochkommata (Single quotes) oder Anführungszeichen (double quotes).
echo "$Array["Name"]"; // klappt nicht, da die double quotes Anfang und Ende des Strings markieren, kann also nicht dazwischen verwendet werden, ohne es zu escapen (so wie auch single quotes escaped werden müssen, wenn diese den Anfang und Ende des Strings markieren, oder wie $ escaped werden muss, wenn es innerhalb double quotes geschrieben werden soll)
echo "$Array['Name']"; // klappt, weil Array-Index in Hochkommate und gesammter String in Anführungszeichen steht - umgekehrt gehts nicht
echo "$Array["Name"]"; // klappt auch, weil double quotes escaped wurden, sieht aber scheiße aus
echo "{$Array["Name"]}"; // innerhalb geschweifter Klammern notiert, muss der Array-Index nicht escaped werden.

Nicht zu vergessen, das man natürlich die althergebrachte Variante verwenden kann, es mit dem Verkettungsoperator . anzuhängen und nur den Array-Index in quotes zu schreiben.

Gweilo
07.10.2003, 12:21:15
Danke für die zahlreichen antworten, aber ihr beantwortet da sachen, die ich gar nicht gefragt habe! Meine fragen waren eigentlich schon nach C4's Antwort zur genüge beantwortet. Was man alles machen kann von switch bis weiss-nicht-was, kenne ich. Die Frage war eigentlich auf die Vorteile der einzelnen Methoden gerichtet (und warum man gewisse sachen nicht tun sollte). Naja, schaden tut's bestimmt nicht =)

RDJ
07.10.2003, 14:23:44
Vorschlag : [KLUGSCHEIßER MODUS] Einfach mit ner Stoppuhr hinsetzen und prüfen was für eine Schreibweise besser / schneller ist
[/KLUGSCHEIßER MODUS] :o)


aber jetzt ma im ernst, es bleibt dir überlassen wie du den Code gestaltest.

Fuchs
07.10.2003, 18:16:15
[i]Nein. Das wäre theoretisch schneller: echo 'Dies ist eine Variable: '.$var.'. ';
Da waere mir gar nicht sooo sicher da deine Variante mehr OP-Codes Produziert.

// Hab's grad gemessen und diese Variante verliert um 15%.

c4
07.10.2003, 18:22:22
Interessant.
Also wenn ich keine Variablen ins Spiel bringe, dann ist es mit " besser. Wird bloß Text ausgegeben, dann '. Kann ich das so als neue Erkenntnis abspeichern?

Fuchs
07.10.2003, 19:14:13
Nein! Ausserdem hast du dich da Verschrieben. Wenn du keine Variablen ins Spiel bringst dann ist auf jeden fall Singel Quotes schneller. Jedoch wenn es ein Langer Text ist wo es sich lohnt dass PHP diesen nciht parsed (also ') dann bist du auch wenn du den string mit . zusammenfuegst schneller. Hast du einen Langen Text mit vielen . verknuepfungen dann ist die sache mit " schneller. Es kommt eben immer drauf an jedoch sollte das beim schreiben von Qode nicht relevant sein sondern die readability sollte hoehere Prioritaet haben. Auf jeden fall muss man solche messungen mit include machen um das Parsen vom PHP Script in OP-Codes zu beruecksichtigen. Beim einsatz von Tools fuer OP-Codes-Cache und vielleicht Optimisierung dieser OP-Codes faellt diese Option sowieso weg.