2012-02-09 2 views
1

Я пытаюсь выполнить итерацию по массиву объектов в PHP, но я не могу понять это. Это мой код:OOP в PHP - итерация массива объектов

require_once("databaseConnect.php"); 
require_once("class/Ticket.php"); 

function showAll(){ 
    $sql = "SELECT * FROM Ticket WHERE Status='1'"; 
    $p = mysql_query($sql); 
    while ($row = mysql_fetch_object($p)){ 
     $t = new Ticket($row->IDTicket, $row->IDUser, $row->TotalOdd, $row->PlacedBet, $row->PossibleWin, $row->Status, $row->Won, $row->Time); 
     $nizTiketa[] = $t; 
    } 
    return $nizTiketa; 
} 

$niz = showAll(); 

for ($i; $i<count($niz); $i++){ 
    echo $niz[$i]->getIDTicket()."<br/>"; 
} 

и это класс билетов:

class Ticket { 
private $IDTicket; 
private $IDUser; 
private $TotalOdd; 
private $PlacedBet; 
private $PossibleWin; 
private $Status; 
private $Won; 
private $Time; 

function Ticket($idTicket, $idUser, $totalOdd, $placedBet, $possibleWin, $status, $won, $time) { 
    $this->IDTicket = $idTicket; 
    $this->IDUser = $idUser; 
    $this->TotalOdd = $totalOdd; 
    $this->PlacedBet = $placedBet; 
    $this->PossibleWin = $possibleWin; 
    $this->Status = $status; 
    $this->Won = $won; 
    $this->Time = $time; 
} 

function getIDTicket(){ 
    return $this->IDTicket; 
} 

function setIDTicket($idTicket){ 
    $this->IDTicket = $idTicket; 
} 

. . .

я получил ошибку вызов функции getIDTicket член() на не-объект

Как это должно быть сделано?

+3

Только для здравомыслия, добавьте в '$ nizTiketa = массив(); 'в верхней части' функции SHOWALL() '- всегда инициализировать ваш массив, прежде чем добавить что-то в него :) – Joe

+0

Вы что вы должны инициализировать массив в php? – user794596

+1

Дело в том, что переменная '$ nizTiketa' не будет существовать, если никакие строки не соответствуют запросу. Это, строго говоря, ошибка, которую вы хотите избежать, инициализируя переменную. – deceze

ответ

1

Пара вещей, которые я хотел бы сделать здесь здравомыслие ...

  1. Как отметил Джо, отформатируйте ваш массив перед добавлением элементов, например

    function showAll() { 
        $nizTiketa = array(); 
        // ... 
    
  2. Либо инициализировать ваш счетчик итераций $i нулю

    for ($i = 0, $count = count($niz); $i < $count; $i++) 
    

    или более просто, используйте foreach

    foreach ($niz as $ticket) { 
        echo $ticket->getIDTicket(), "<br/>"; 
    } 
    
+0

спасибо, я забыл положить $ i = 0 – user794596

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