Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中从值对象获取数据?_Php_Oop - Fatal编程技术网

如何在PHP中从值对象获取数据?

如何在PHP中从值对象获取数据?,php,oop,Php,Oop,所以我用PHP从数据库中获取数据。我打算比较从查询中获得的数据创建的每个对象的值。到目前为止还不错 当我试图从对象中检索数据时,问题就出现了。一旦对象被创建,它就会变成空的 我不是PHP开发人员,所以我不知道是否遵循了正确的PHP逻辑。我习惯于JS、AS3和Java,因此PHP中的对象和值对象与我所知道的略有不同 有人知道我如何检索数据吗 <?php include("../config.php"); class userVO { public

所以我用PHP从数据库中获取数据。我打算比较从查询中获得的数据创建的每个对象的值。到目前为止还不错

当我试图从对象中检索数据时,问题就出现了。一旦对象被创建,它就会变成空的

我不是PHP开发人员,所以我不知道是否遵循了正确的PHP逻辑。我习惯于JS、AS3和Java,因此PHP中的对象和值对象与我所知道的略有不同

有人知道我如何检索数据吗

<?php
    include("../config.php");

    class userVO
    {
        public  $uid;
        public  $name;
        public  $email;
        public  $list;
        public  $num_list_items;
        public  $matches;
        public  $num_matches;

        public function __construct()
        {
            $this->matches = array();
        }
    }

    mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
    mysql_select_db(DB_NAME) or die(mysql_error());

    $json_array = array();
    $result = mysql_query("...");

    $num_results = mysql_numrows($result);
    mysql_close();

    $users = array();
    $i = 0;
    while($i < $num_results)
    {
        $match = new userVO;
        $match->uid = mysql_result($result, $i, "uid");
        $match->name = mysql_result($result, $i, "name");
        $match->email = mysql_result($result, $i, "email");
        $users[] = userVO;
        $i++;
    }

    $num_users = count($users);
    echo "num users: " . $num_users . "<br>";

    $i = 0;
    while($i < $num_users)
    {
        echo "--- i: " . $i . " ---<br>";
        $current_user = $users[$i];

        echo "users[" . $i . "]: " . $users[$i] . "<br>";
        echo "users[" . $i . "]->name: " . $users[$i]->name . "<br>";
        echo "current user: " . $current_user . "<br>";
        echo "current user name: " . $current_user->name . "<br>";

        $i++;
    }
?>

您有

$users[]=userVO

这应该是

$users[]=$match

这是您将新userVO对象放入的变量

在创建对象的位置还应该有括号


$match=newuservo()

我发现while循环中有一行看起来不正确:
$users[]=userVO
,我认为应该是
$users[]=$match

然后,您还可以在$user的数组上使用
foreach()
循环,而不是在下面使用另一个循环

我将编写代码的最后一部分,如下所示:

$result = mysql_query("...");

$users = array();

while($row = mysql_fetch_assoc($result))
{
    $match = new userVO();
    $match->uid = $row["uid"];
    $match->name = $row["name"];
    $match->email = $row["email"];
    $users[] = $match;
}
mysql_close();

$num_users = count($users);
echo "num users: " . $num_users . "<br>";

foreach($users as $key => $user)
{
    echo "--- key: " . $key . " ---<br>";
    echo "users[" . $key . "]: " . $user . "<br>";
    echo "users[" . $key . "]->name: " . $user->name . "<br>";
    echo "current user: " . $user . "<br>";
    echo "current user name: " . $user->name . "<br>";
}


?>
然后你可以做:

while($row = mysql_fetch_assoc($result))
{
    $users[] = new userVO($row["uid"],$row["name"],$row["email"]);
}

嗯,我马上就能看到一些问题:

  • $users[]=userVO; 您没有向数组添加$match,而是添加了userVO,它是类的名称,而不是保存类实例的变量

  • 您需要为此创建一个类吗?除非你要用这些做很多繁重的工作,否则你可能不用使用多维数组。。。mysql_fetch_assoc()非常适合这样做,因为它创建了表行的关联数组。我通常会这样做:

  • 然后,一旦我整理好了作品,我会做以下操作来使用它:

    
    foreach($stuff as $row){
       $uid = $row['uid'];
       $name = $row['name'];
       $email = $row['email'];
    
       echo "$uid $name $email"; 
    }
    

    也许你的意思是
    $users[]=$match
    ?@ircmaxell-你在哪里看到在任何地方定义的
    user
    类?@Matt:我没有,但我假设这就是
    $match=new userVO
    应该是指…@ircmaxell-他展示了他在上面定义了类
    userVO
    ,所以我认为他调用
    newuservo
    不是一个错误@Matt:好的观点。我把它理解为
    \/
    (反斜杠正斜杠)而不是大写V。。。对不起…哈哈,不错!这实际上是一个明显的错误,但我仍然忽视了它。这就解决了我关于技巧的问题,但是我对保存和检索数据本身的部分没有问题。你的第一段确实是我在没有看到的情况下犯的明显错误。谢谢
    
    $sql = "SELECT * FROM table WHERE foo='bar'";
    $result = mysql_query($sql);
    
    if (!$result) {
       echo 'Could not run query: ' . mysql_error();
       echo 'Query was: ' . $sql;
       exit;
    }
    
    $stuff = array();
    if (mysql_num_rows($result) > 0) {
       while ($row = mysql_fetch_assoc($result)) {
          $stuff[] = $row;
       }
    }
    
    
    foreach($stuff as $row){
       $uid = $row['uid'];
       $name = $row['name'];
       $email = $row['email'];
    
       echo "$uid $name $email"; 
    }