ebody: Finde den Fehler nicht - Klassen Beginner

Hallo,

ich beginne gerade mit Klassen in PHP zu arbeiten. Wenn ich folgendes Script ausführe wird nichts auf der Seite dargestellt, auch keine Fehler werden angezeigt.

Wenn ich $csv = file( $csvFile ); lösche wird zumindest "PHP Klassen" und ein Array ausgegeben. Daher denke ich, dass hier der Fehler liegt. Ich habe statt dessen auch mal this->csv = file( this->csvFile ); probiert, dann wird aber auch nichts dargestellt.

Weiß jemand, wo das Problem liegt?

Gruß
ebody

error_reporting(E_ALL);  
  
class csvEinlesen {  
  
	public $csvFile;  
	public $csv;  
		  
	$csv = file( $csvFile );	  
	//this->csv = file( this->csvFile );  
		  
	public function check_data_file() {  
	  
	$safe_data = array();  
	$search = array("\r","\n","\t","<br","</ br>","\"");  
	$replace1 = array('','','','','');  
  
		foreach ( $csv as $csv_line ) {  
			$csv_line = str_replace($search,$replace,$csv_line);  
			$safe_data[] = $csv_line;  
		}  
		  
	return $safe_data;  
  
	}  
  
}  
  
  
echo "PHP Klassen<br>";  
  
$csvEinlesenInst = new csvEinlesen;  
$csvEinlesenInst->csvFile = "datei.csv";  
print_r($csvEinlesenInst->check_data_file());
  1. Hi,

    Ich kenn mich mit PHP-Klassen nicht aus, aber ich versuch's mal:

    error_reporting(E_ALL);

    class csvEinlesen {
    public $csvFile;
    public $csv;

    $csv = file( $csvFile );

      
    zu diesem Zeitpunkt ist $csvFile noch undefiniert. file() wird also vermutlich scheitern.  
      
      
    ~~~php
      
    
    > $csvEinlesenInst = new csvEinlesen;  
    > $csvEinlesenInst->csvFile = "datei.csv";  
    
    

    An dieser Stelle hättest Du vermutlich gerne, daß $csvEinlesenInst->$csv auf file($csvFile) gesetzt wird.

    Das kann m.E. so nicht passieren. Dazu bräuchte es

      
    public function set_data_file($filename) {  
        this->$csvFile = $filename;  
        this->$csv = file($filename); //eigentlich wär auch nnoch etwas Fehler-Handling nötig  
    }  
    
    

    und dann eben nicht

      
    $csvEinlesenInst->csvFile = "datei.csv";  
    
    

    sondern

      
    $csvEinlesenInst->setDataFile("datei.csv");  
    
    

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hi,

    Wenn ich folgendes Script ausführe wird nichts auf der Seite dargestellt, auch keine Fehler werden angezeigt.

    Das liegt daran, dass du einen Syntaxfehler im Script hast – und da es daher überhaupt nicht ausgeführt wird, hat auch dein Versuch, das error_reporting zu setzen, keine Auswirkung. (Deshalb setzt man das besser direkt in der PHP-Konfiguration, als erst zur Laufzeit.)

    error_reporting(E_ALL);

    class csvEinlesen {

    public $csvFile;
    public $csv;

    $csv = file( $csvFile );
    //this->csv = file( this->csvFile );

      
    Parse error:  syntax error, unexpected '$csv' (T\_VARIABLE), expecting function (T\_FUNCTION) in […]  
      
    – das ist die Meldung, die du damit kriegen solltest.  
      
    Du kannst nicht einfach so Anweisungen in einer Klasse notieren – die müssen sich innerhalb einer Methode befinden … deshalb: expecting function (T\_FUNCTION).  
      
    MfG ChrisB  
      
    
    -- 
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    
    1. Hallo,

      vielen Dank an euch beide, es waren sehr hilfreiche Infos. Ich habe das Script angepasst und auch die PHP Konfigurationsdatei und es funktioniert:

      class csvEinlesen {  
      	  
      	public function setDataFile($filename) {  
      		  
      		$csv = file($filename);  
      		return $csv;  
        
      	}  
      		  
      	public function check_data_file(Array $csv) {  
      	  
      	$safe_data = array();  
      	$search = array("\r","\n","\t","<br>","</ br>","\"");  
      	$replace = array('','','','','','');  
        
      		foreach ( $csv as $csv_line ) {  
      			$csv_line = str_replace($search,$replace,$csv_line);  
      			$safe_data[] = $csv_line;  
      		}  
      		  
      	return $safe_data;  
        
      	}  
        
      }  
        
        
      echo "PHP Klassen<br>";  
        
      $csvEinlesenInst = new csvEinlesen;  
      $csv1 = $csvEinlesenInst->setDataFile("datei.csv");  
      print_r($csvEinlesenInst->check_data_file($csv1));
      

      Gruß
      ebody

      1. Tach!

        vielen Dank an euch beide, es waren sehr hilfreiche Infos. Ich habe das Script angepasst und auch die PHP Konfigurationsdatei und es funktioniert:

        Was ist eigentlich dein Ziel? Das CSV-Format kennt Regeln, um alle Zeichen gefahrlos transportieren zu können. Und PHP hat bereits Funktionen eingebaut, welche Daten den Regeln gemäß ein- und auspacken können: fputcsv(), fgetcsv(), str_getcsv().

        $search = array("\r","\n","\t","<br>","</ br>",""");
        $replace = array('','','','','','');

        Erst neulich ist mir eine Datei über den Weg gelaufen, von der der Ersteller behauptete, sie sei CSV, bei der alle Semikolons in den Daten durch Leerzeichen ersetzt wurden. Da stand dann sowas im Text:
        "Teil f&uuml r irgendwas"

        dedlfix.

        1. @@dedlfix:

          nuqneH

          Erst neulich ist mir eine Datei über den Weg gelaufen, von der der Ersteller behauptete, sie sei CSV, bei der alle Semikolons in den Daten durch Leerzeichen ersetzt wurden. Da stand dann sowas im Text:
          "Teil f&uuml r irgendwas"

          Garbage in, garbage out. Auch &uuml; hat in CSV nichts zu suchen.

          Qapla'

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)