2016-07-23 23 views
0

我想从类数据库传递一个数组到类的字符,有人可以帮助我吗?如何在OOP PHP中传递数组?

我的代码:

级数据库

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; 

    } 

} 
} 

阶级属性

Class Characters { 

    public function getUserMerchandise() { 

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

     foreach ($type as $value) { 

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

     } 

    } 
} 

我想你能明白我想要什么,所以如果有人可以帮助我我很感激。

+0

我发现,你做'$返回数组中可能出现的问题;'在类'Database' –

+0

你可以尝试寻找到[依赖注入(http://krasimirtsonev.com/blog /条/依赖注入功能于PHP,例如,如何对DI-创建你自己的依赖注入容器)。这听起来很适合你的用例。 –

+0

你只需要'type'字段值吗? – RomanPerekhrest

回答

0

你需要加载在while循环数组,然后返回它while循环完成后

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;  
    } 
} 

或者更好的选择只是要使用,这将加快查询什么,那么你可以使用->fetchAll加载一个完整的结果rray准备返回

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

根据你的问题,我能看到的是回报应该是外部while循环。

+0

我已经试过了,不工作,因为我有多个变量 –

+1

这是什么意思“多变量”? –

0

您是在查找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

使用PDO::FETCH_COLUMN标志仅从所需的字段中取值的优化版本:

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; 
      } 
     } 
    } 

}