PHP Verständnisfragen

Alice

Erfahrenes Mitglied
Hallo Zusammen. :)

Da ich oft vieles in PHP nicht verstehe und auch bei Google (kenne die wichtigen Keywords usw. nicht) nichts finde was mir weiter hilft, dachte ich mir ich mache hier einen "PHP Verständnisfragen" Thread auf. Denn mittlerweile habe ich echt jedes mal ein blödes Gefühl wenn ich einen Thread erstelle für jedes einzelne Problem.

Ich hoffe das ist ok. Gerne können auch andere PHP-Anfänger wie ich diesen Thread für "einfache Verständnisfragen" benutzen.

Frage:
Wie nennt man so eine Funktion? Und warum kann ich hier keine Leerzeichen einbauen wie bei anderen Variablen?

PHP:
$size_x+=$get_size[0];

Das geht z.B. nicht:
PHP:
$size_x += $get_size[0];

Ich habe gerne meinen PHP-Code Semantisch Korrekt.

PHP:
$size_x+ = $get_size[0];

Aber das geht auch nicht.
 
  1. Das ist keine Funktion, sondern ein Operator. Na gut, theoretisch betrachtet ist es doch eine Funktion, oder eben mathematisch gesehen eine Relation, also eine Menge mit Tripeln.
  2. Das zweite Beispiel muss auch funktionieren.
  3. Der Operator heißt +=. + und = sind zwei eigenständige Operatoren und dienen somit einem anderen Zweck. $a += $b ist auch nur eine Abkürzung für $a = $a + $b.
 
Danke für die Antwort. :)

Da hätte ich noch eine Frage zu.

Ich verwende diese "Funktion" in FOR-Schleifen. Wenn ich das nun ändern würde in
PHP:
$size_x = $size_x + $get_size[0];
es aber mehrmals (in mehreren FOR-Schleifen) verwenden würde, würde dann später das richtige Ergebnis rauskommen?
 
PHP:
for($i=0; $i < strlen($var1); $i++) {
   $get_size = getimagesize($pfad.$var1[$i].'.png');
   $Img[]    = array('img' => imagecreatefrompng($pfad.$var1[$i].'.png'), 'x' => $get_size[0],);
   $size_x   = $size_x + $get_size[0];
}

for($i=0; $i < strlen($var2); $i++) {
   $get_size = getimagesize($pfad.$var2[$i].'.png');
   $Img[]    = array('img' => imagecreatefrompng($pfad.$var2[$i].'.png'), 'x' => $get_size[0],);
   $size_x   = $size_x + $get_size[0];
}

for($i=0; $i < strlen($var3); $i++) {
   $get_size = getimagesize($pfad.$var3[$i].'.png');
   $Img[]    = array('img' => imagecreatefrompng($pfad.$var3[$i].'.png'), 'x' => $get_size[0],);
   $size_x   = $size_x + $get_size[0];
}

echo $size_x; // Wäre bei diesem Code $size_x der richtige Wert?

In der Variable "$size_x" sollen alle ausgemessenen Werte drin sein.
 
Ich habe dein Skript mal einen Tick ausgebessert:
PHP:
$count = strlen($var1);
for($i = 0; $i < $count; ++$i) { 
   $get_size = getimagesize($pfad . $var1[$i] . '.png'); 
   $image[]  = array('img' => imagecreatefrompng($pfad . $var1[$i] . '.png'), 'x' => $get_size[0]); 
   $size_x   = $size_x + $get_size[0]; 
} 

$count = strlen($var2);
for($i = 0; $i < $count; ++$i) { 
   $get_size = getimagesize($pfad . $var2[$i] . '.png'); 
   $image[]  = array('img' => imagecreatefrompng($pfad . $var2[$i] . '.png'), 'x' => $get_size[0]); 
   $size_x   = $size_x + $get_size[0]; 
} 

$count = strlen($var3);
for($i=0; $i < $count; ++$i) { 
   $get_size = getimagesize($pfad . $var3[$i] . '.png'); 
   $image[]  = array('img' => imagecreatefrompng($pfad . $var3[$i] . '.png'), 'x' => $get_size[0]); 
   $size_x   = $size_x + $get_size[0]; 
}
  1. Wenn eine Funktion im Schleifenkopf steht, dann wird sie bei jedem Schleifendurchgang aufgerufen. Da sich bei dir aber die Zeichenkettenlänge nicht ändert, solltest du die Länge vorher ermitteln und dann immer nur auf diesen Wert zurück greifen. Dadurch ist das Ganze schneller.
  2. ++$i ist schneller als $i++
 
Und auch hier gilt. Redundante Codes in Funktionen packen.
PHP:
addVarToImage($image, $size_x, $var1, $path);
addVarToImage($image, $size_x, $var2, $path);
addVarToImage($image, $size_x, $var3, $path);

function addVarToImage(&$image, &$size_x, $var, $path){
	foreach(str_split($var) as $letter){
		$filePath = $pfad . $letter . '.png';
		$get_size = getimagesize(filePath); 
	   	$image[]  = array('img' => imagecreatefrompng(filePath), 'x' => $get_size[0]); 
	   	$size_x   = $size_x + $get_size[0]; 
	}
}

ob nun das mit i++ und jedesmal den Buchstaben auslesen schneller ist als mit str_split() den string in seine Buchstaben zu zerlegen, das weiss ich grad nicht.
 
Ich würde dieses Skript zu gern mal komplett sehen, sowie die Ausgabe.

@Yaslaw: Im Zweifelsfall einfach mal testen.

String 'Test' zerlegen und jeden Buchstaben mit echo ausgeben bei 1000 Durchläufen.

for: 1746.18µs
foreach: 2366.78µs
(Durchschnittswerte)


Irgendwie auch logisch, ein String ist nichts weiter als ein Char Array das durchlaufen wird. Ich wusste es vor dem Test auch nicht wirklich.
 
Zuletzt bearbeitet:
Zurück