User Tools

Site Tools


php:tutorials:debugwithvardump

[PHP] Debuggen mit var_dump()

Ausgangslage

Häufig kommt es vor, dass wir eine Code haben der nicht das macht was wir wollen. Es ist nicht immer einfach herauszufinden warum. Es gibt möglichkeiten zum Debuggen auf einem lokalen Server. Jedoch hat man diese nicht immer installiert, oder man muss es auf dem Host-Server testen, da es sich anders verhält als lokal.

Ich habe hier mal ein einfachen Code mit zwei Fehler drin

<?php
	$text= 'Foo hat grosse Füsse';
	$text= str_replace('Foo', 'Bar', $text);
	$text= str_replace('Bar', 'foo', $text);
	if(1=='1'){
		$text= str_replace('foo', 'bar', $text);
	}
	if(1==='1'){
		$text= str_replace('bar', 'foo', $text);
	}
	$text= str_replace('Foo', 'bar1', $text);
	echo $text;
?> 

Eigentlich erwarte ich da die Ausgabe 'bar1 hat grosse Füsse'. Jedoch kommt das folgende

foo hat grosse Füsse 

Lösung

Irgend einer meiner str_replace() oder ein if() funktioniert nicht so wie ich will. Ich ergänze den Code um mehrere Zeilen mit var_dump() um mir einige Zwieschenresultate anzuschauen.

<?php
	$text = 'Foo hat grosse Füsse';
	$text = str_replace('Foo', 'Bar', $text);
var_dump($text);    
	$text = str_replace('Bar', 'foo', $text);
var_dump($text);
	if(1=='1'){
		$text = str_replace('foo', 'bar', $text);
var_dump($text);    
	}
	if(1==='1'){
		$text = str_replace('bar', 'foo', $text);
	}
var_dump($text);
	$text = str_replace('Foo', 'bar1', $text);
	echo $text;
?> 

Die Ausgabe sieht wie folgt aus

string(20) "Bar hat grosse Füsse"
string(20) "foo hat grosse Füsse"
string(20) "bar hat grosse Füsse"
string(20) "bar hat grosse Füsse"
bar hat grosse Füsse 

Daruas folgern wir, dass der 4te replace nichts bewirkt hat. Stellt sich die Frage, ist der if() falsch? nun, prüfen wir das mal. Dazu füge ich einfach mal im if die Ausgabe var_dump('Testpunkt 1'); ein um zu sehen ob es durch den if() geht oder nicht. Die vorgängenin var_dump() entfernen wir wieder, weil dort läuft es ja wie erwartet.

<?php
	$text = 'Foo hat grosse Füsse';
	$text = str_replace('Foo', 'Bar', $text);
	$text = str_replace('Bar', 'foo', $text);
	if(1=='1'){
		$text = str_replace('foo', 'bar', $text);
	}
	if(1==='1'){
var_dump('Testpunkt 1');        
		$text = str_replace('bar', 'foo', $text);
	}
var_dump($text);
	$text = str_replace('Foo', 'bar1', $text);
	echo $text;
?> 

Die Ausgabe ist

string(20) "bar hat grosse Füsse"
bar hat grosse Füsse

Also geht er nicht in den if(). Wenn wir den if() genauer ansehen, merken wir den Fehler schnell 1 ist nicht Typenvergleich & wertevergleich mit '1. Und ein Int ist natürlich nicht dasselbe wie ein String. Also ändern wir mal einen reinen Wertevergleich und schauen was passiert.

<?php
	$text = 'Foo hat grosse Füsse';
	$text = str_replace('Foo', 'Bar', $text);
	$text = str_replace('Bar', 'foo', $text);
	if(1=='1'){
		$text = str_replace('foo', 'bar', $text);
	}
	if(1=='1'){
var_dump('Testpunkt 1');        
		$text = str_replace('bar', 'foo', $text);
	}
var_dump($text);
	$text = str_replace('Foo', 'bar1', $text);
	echo $text;
?> 

Die Ausgabe

string(11) "Testpunkt 1"
string(20) "foo hat grosse Füsse"
foo hat grosse Füsse 

Der 2te if() ist somit auch korrekt. Bleibt nur nach der letzte str_replace der nicht so will wie wir wollen. Schnell sehen wir, dass da eine Gross-Kleinschreibung falsch ist. foo wird nicht mit Foo gefunden..

das korrigierte PHP sieht dann so aus

<?php
	$text = 'Foo hat grosse Füsse';
	$text = str_replace('Foo', 'Bar', $text);
	$text = str_replace('Bar', 'foo', $text);
	if(1=='1'){
		$text = str_replace('foo', 'bar', $text);
	}
	if(1=='1'){     
		$text = str_replace('bar', 'foo', $text);
	}
	$text = str_replace('foo', 'bar1', $text);
	echo $text;
?> 

Und die Ausgabe

bar1 hat grosse Füsse
php/tutorials/debugwithvardump.txt · Last modified: 09.12.2013 09:39:54 (external edit)