2016-07-23 7 views
0

Ich möchte ein Array aus der Klasse Datenbank an die Klasse Characters übergeben, kann mir jemand helfen?Wie übergeben Sie Arrays in OOP PHP?

Mein Code:

Klasse Database

class Database { 

    public function DBCharactersMerchandise() { 

    $db = $this->connection(); 

    $uid = $_SESSION['id']; 

    $this->conn = $db->prepare("SELECT * FROM mercadoria WHERE cid = :mid"); 
    $this->conn->execute(array(':mid' => $uid)); 

    while($row = $this->conn->fetch(PDO::FETCH_ASSOC)){ 

     $array = [ 

      $row['type'], // here I have 'apple' and 'orange' 

     ]; 

     return $array; 

    } 

} 
} 

Klasse Charaktere

Class Characters { 

    public function getUserMerchandise() { 

     $db = new Database(); 
     $type = $db->DBCharactersMerchandise(); 

     foreach ($type as $value) { 

     echo $value; // I want echo 'apple' and 'orange' here 

     } 

    } 
} 

Ich denke, Sie wissen, was ich will, so dass ich mir jemand helfen könnte Ich schätze.

+0

ich vor Ort ein mögliches Problem zurückzukehren, wo Sie 'return $ Array tun;' in der Klasse 'Database' –

+0

Sie können versuchen, ein Blick in [Dependency Injection] (http://krasimirtsonev.com/blog/article/Dependency-Injection-in-PHP-Beispiel-how-to-DI-erstellen-your-own-Abhängigkeit-injection-container). Es klingt wie eine gute Passform für Ihren Anwendungsfall. –

+0

benötigen Sie nur die 'type'-Feldwerte? – RomanPerekhrest

Antwort

0

Sie benötigen das Array in der while-Schleife zu laden und sie dann zurückkommen, nachdem die while-Schleife abgeschlossen ist

class Database { 

    public function DBCharactersMerchandise() { 

     $db = $this->connection();  
     $uid = $_SESSION['id']; 

     $this->conn = $db->prepare("SELECT * FROM `mercadoria` WHERE `cid` = :mid"); 
     $this->conn->execute(array(':mid' => $uid)); 

     $array = []; 

     while($row = $this->conn->fetch(PDO::FETCH_ASSOC)){ 
      $array[] = $row['type']; 
     } 
     return $array;  
    } 
} 

Oder noch besser wählen Sie einfach, was Sie verwenden möchten, wird dies die Abfrage beschleunigen, dann können Sie ->fetchAll verwenden, um ein vollständiges Ergebnis ein laden rray bereit

class Database { 

    public function DBCharactersMerchandise() { 

     $db = $this->connection();  
     $uid = $_SESSION['id']; 

     $this->conn = $db->prepare("SELECT `type` FROM `mercadoria` WHERE `cid` = :mid"); 
     $this->conn->execute(array(':mid' => $uid)); 

     $array = $this->conn->fetchAll(PDO::FETCH_ASSOC)){ 

     return $array;  
    } 
} 
-1

Wie Ihre Frage, was ich sehen kann, ist Rückkehr sollte außerhalb While-Schleife sein.

+0

Ich versuche es schon, funktioniert nicht, weil ich mehrere Variablen habe –

+1

Was bedeutet das" Multiple Variable "? –

0

Suchen Sie nach generators?

class Database { 

    public function DBCharactersMerchandise() { 

    $db = $this->connection(); 

    $uid = $_SESSION['id']; 

    $this->conn = $db->prepare("SELECT * FROM mercadoria WHERE cid = :mid"); 
    $this->conn->execute(array(':mid' => $uid)); 

    while($row = $this->conn->fetch(PDO::FETCH_ASSOC)){ 

     $array = [ 

      $row['type'], // here I have 'apple' and 'orange' 

     ]; 

     yield $array; 

    } 

} 
} 

class Characters { 

    public function getUserMerchandise() { 

     $db = new Database(); 

     foreach ($db->DBCharactersMerchandise() as $value) { 

     echo $value; // I want echo 'apple' and 'orange' here 

     } 
    } 
} 
0

Die optimierte Version PDO::FETCH_COLUMN Flagge mit den Werten aus dem benötigten Bereich holen nur:

class Database { 

    public function DBCharactersMerchandise() { 

     $db = $this->connection(); 
     $this->conn = $db->prepare("SELECT type FROM mercadoria WHERE cid = :mid"); 
     $this->conn->execute(array(':mid' => $_SESSION['id'])); 

     return $this->conn->fetchAll(\PDO::FETCH_COLUMN); 
    } 

} 

Class Characters { 

    public function getUserMerchandise() { 

     $db = new Database(); 
     $types = $db->DBCharactersMerchandise(); 

     if (!empty($types) && is_array($types)) { 
      foreach ($types as $type) { 
       echo $type; 
      } 
     } 
    } 

}