2013-09-02 2 views
0

Это кажется довольно простым. Я в основном манипулирую входным текстовым файлом и пытаюсь вывести файл в определенном формате. Прежде чем я смогу это сделать, мне нужен Getter $team->getWins, чтобы вернуть правильное значение. Формат входного файла - это имя команды, выигрыши, потери. Вот входной текстовый файл mlb_nl_2011.txt:getter не работает после того, как конструктор показывает правильное значение

Phillies 102 60 
Braves 89 73 
Nationals 80 81 
Mets 77 85 
Marlins 72 90 
Brewers 96 66 
Cardinals 90 72 
Reds 79 83 
Pirates 72 90 
Cubs 71 91 
Astros 56 106 
DBacks 94 68 
Giants 86 76 
Dodgers 82 79 
Rockies 73 89 
Padres 71 91 

Вот Team.php файл:

<?php 

class Team { 

    private $name; 
    private $wins; 
    private $loss; 

    public function __construct($name, $wins, $loss) { 
    $this->name = $name; 
    $this->wins = $wins; 
    $this->loss = $loss; 

    echo $this->name ." "; 
    echo $this->wins ." "; 
    echo $this->loss ."\n"; 
    } 

    public function getName() { 
    return $this->name; 
    } 

    public function getWins() { 
    return $this->wins; 
    } 

    public function getLosses() { 
    return $this->loss; 
    } 

    public function getWinPercentage() { 
    return $this->wins/($this->wins + $this->loss); 
    } 

    public function __toString() { 
    return $this->name . " (" . $this->wins . ", " . $this->loss . ")"; 
    } 

} 

?> 

Вот мой главный PHP файл.

<?php 

include_once("Team.php"); 

    $file_handle = fopen("mlb_nl_2011.txt", "r"); 

    $teams = array(); 
    $counter = 0; 

    while(!feof($file_handle)) { 
      $line_data = fgets($file_handle); 
      $line_data_array = explode(' ',trim($line_data)); 
      $team = new Team($line_data_array[0],$line_data_array[1],$line_data_array[2]); 
      $teams[$counter] = $team; 
      $counter++; 
    } 

    print_r($teams); 
    //looks good through this point 

    $output_file = "mlb_nl_2011_results.txt"; 
    $opened_file = fopen($output_file, 'a'); 

    foreach($teams as $team) { 
    $win = $team->getWins(); 
    $los = $team->getLosses(); 
    echo $win ." ". $los."\n"; 
    $name = $team->getName(); 
    echo fprintf($opened_file, "%s %d\n", $name, $win_per); 
    } 
    fclose($opened_file); 

?> 

В тот момент, когда я делаю print_r($teams) все значения являются правильными. Я получаю распечатку, похожее на это для каждой команды:

[15] => Team Object 
     (
      [name:Team:private] => Padres 
      [wins:Team:private] => 71 
      [loss:Team:private] => 91 
     ) 

Но когда я печать на echo $win ." ". $los."\n"; я получаю это:

102 60 
1289 73 
1080 81 
1377 85 
872 90 
1196 66 
1190 72 
1379 83 
872 90 
1171 91 
856 106 
1094 68 
1086 76 
1082 79 
1173 89 
1171 91 

Любые идеи ??

ответ

0

Неожиданные цифры в начале каждой строки (кроме первого) являются результатом этого заявления ...

echo fprintf($opened_file, "%s %d\n", $name, $win_per); 

... как fprintf возвращает длину строки записывается в поток, и echo отправляет этот результат на стандартный вывод (в этом случае, очевидно, экран). Следовательно, например, вы получили '12', напечатанный для второй строки, за которым сразу следует '89 73\n'.

Решение также очевидно: просто избавьтесь от echo здесь. На самом деле, использование конструкций echo print ... ; в реальном коде редко является хорошей идеей.)

+0

спасибо, хороший информация. – user2296342

Смежные вопросы