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