我有个奇怪的问题。我正在学习PHP (用来用Java编程),我试图做一件简单的事情。我有一个DAO方法,它执行这样的操作:
while (oci_fetch($parse)) {
$stats = new Stats();
$stats->setId($id);
$stats->setName($name);
$stats->setEmail($email);
$stats->setGender($gender);
$stats->setBirthday($birthday);
$statslist[] = $stats;
}
return $statslist;我还有另一个使用这个函数(称为getById)的PHP文件,作为一个测试,如下所示:
$statsdao = new StatsDAO();
$statslist[] = $statsdao->getById(1);
foreach ($statslist as $stat) {
echo $stat->getName();
}这似乎很简单: DAO返回一个数组,我的另一个文件读取返回的Stats数组并打印它。但是我得到了这个错误信息:
致命错误:对第25行中/var/www/socializi/interfaceusuario/index.php中的非对象调用成员函数getName()
奇怪的是:如果我在DAO的getById函数中调用foreach循环,它就会正确地打印它,但是当我从外部调用函数并将它分配给另一个数组时,它不会将数组的内容识别为对象。
我在这里做错什么了?谢谢!
发布于 2012-03-09 17:29:58
试着这样做:
$statsdao = new StatsDAO();
$statslist = $statsdao->getById(1);
foreach ($statslist as $stat) {
echo $stat->getName();
}添加一个只提供更多服务的[],然后将数组放入另一个数组中,从而使您
$statslist[0][0]->getName(); //would only work on php 5.4 with this syntaxe but it shoes the idea.一层太深了。
在第一个里面放另一个额头,也可以修复它,但它很难看,什么也没有用:
$statsdao[] = new StatsDAO();
$statslist = $statsdao->getById(1);
foreach ($statslist as $stats) {
foreach ($stats as $stat) {
echo $stat->getName();
}
}发布于 2012-03-09 17:32:33
你不需要托架。设置$statslist时。通过将括号放入PHP,您将告诉PHP要创建一个新数组,并将第一个键(0)设置为getById()的返回值。这就产生了一个数组。你不会真的想要那样的。
$statsdao = new StatsDAO();
$statslist = $statsdao->getById(1);
foreach ($statslist as $stat) {
echo $stat->getName();
}发布于 2012-03-09 17:32:58
结果是您使用的是$statslist[] = $statsdao->getById(1);,它在$statslist数组的第一个元素中创建结果。所以放下[.]
您可以激活error_reporting(E_ALL);以避免此类问题。这将告诉您,您正在尝试追加一个非数组变量的元素。
编辑:如果数组不存在,错误地记得发出了这个通知。但是,如果方括号表示法$array[]不存在,它似乎会创建一个数组$array。
不过,在开发环境中,error_reporting(E_ALL);仍然是一个好主意。帮助您避免错误的来源。
https://stackoverflow.com/questions/9638390
复制相似问题