方法不会返回值不能使用对象作为数组php

时间:2013-10-08 22:13:23

标签: php oop methods

我想逐个获取变量我做错了什么,以及为什么我不能让所有数组回显出来?

<?php
class get_all{
public $id;
public $product_name;
public $price;
public $date_added;
public $det;    
function get_detais(){

$sql = mysql_query("SELECT * FROM products  ORDER BY id DESC ");
$productCount = mysql_num_rows($sql); // count the output amount
$det=array();
if ($productCount > 0) {
    while($row = mysql_fetch_array($sql)){

            $id = $row["id"];
            $product_name = $row["product_name"];
            $price = $row["price"];
            $date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));

      }return $det=array($id,$product_name,$price,$date_added);
} else {
    return $det= "We have no products listed in our store yet";
}
}
}
?>

在这里我将函数称为数组元素:

<?php
$det=new get_all;

$det->get_detais();
echo $det[1];
?>

2 个答案:

答案 0 :(得分:0)

您可以将第二段代码更改为:

<?php
$det=new get_all;

$a=$det->get_detais();
echo $a[1];
?>

...但是这并不适用于所有情况,因为(1)get_details()可能会返回一个字符串,(2)即使它是一个数组,它也可能包含少于两个元素。所以:

<?php
$det=new get_all;

$a=$det->get_detais();
if(is_array($a)&& count($a)>1)
  echo $a[1];
?>

作为旁注,在您的get_details()方法中,执行return $var=...将毫无意义,因为return退出该函数并且$var被销毁。< / p>

编辑:正如@a​​safreedman指出的那样,你的方法不会像你期望的那样工作。您的while应该是这样的:

while($row = mysql_fetch_array($sql)){
        $id = $row["id"];
        $product_name = $row["product_name"];
        $price = $row["price"];
        $date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));
        $det[]=array($id,$product_name,$price,$date_added);
  }return $det;

答案 1 :(得分:0)

基本PHP。您正在运行while循环并不断覆盖您获取的所有数据:

while($row = mysql_fetch_array($sql)) {
   $var = $row[...];
}

每次获取新的数据行时,您上次保存的$var都会被新值破坏。

您需要构建一个数据数组,例如更像是

$data = array();
while($row = mysql_fetch_array($sql)) {
   $data[] = $row;
}
return $data;