在非对象上调用成员函数-PHP
是否有人可以显示、修复或告诉我为什么会出现此错误在非对象上调用成员函数-PHP,php,mysql,Php,Mysql,是否有人可以显示、修复或告诉我为什么会出现此错误 对非对象调用成员函数getRating() 下面是函数 public function getRating($movieid){ $movieid = mysql_real_escape_string($movieid); $average = 0; $e = mysql_query("SELECT AVG(`rating`) as average FROM movie_ratings WHERE movieid='$mo
对非对象调用成员函数getRating()
下面是函数
public function getRating($movieid){
$movieid = mysql_real_escape_string($movieid);
$average = 0;
$e = mysql_query("SELECT AVG(`rating`) as average FROM movie_ratings WHERE movieid='$movieid'") or die(mysql_error());
if (mysql_num_rows($e)>0){
extract(mysql_fetch_array($e));
}
return $average;
}
$movie = $movie->getByPerma($perma,$language);
if (empty($movie)){
$movie = '';
} else {
$movie['rating'] = $movie->getRating($movie['id']);
$tags = $movie->getMovieCategoryDetails($movie['id'],$language);
if (count($tags)){
$smarty->assign("tags",$tags);
} else {
$smarty->assign("tags","");
}
}
getRating($movie_id)
这就是我调用函数的方式
public function getRating($movieid){
$movieid = mysql_real_escape_string($movieid);
$average = 0;
$e = mysql_query("SELECT AVG(`rating`) as average FROM movie_ratings WHERE movieid='$movieid'") or die(mysql_error());
if (mysql_num_rows($e)>0){
extract(mysql_fetch_array($e));
}
return $average;
}
$movie = $movie->getByPerma($perma,$language);
if (empty($movie)){
$movie = '';
} else {
$movie['rating'] = $movie->getRating($movie['id']);
$tags = $movie->getMovieCategoryDetails($movie['id'],$language);
if (count($tags)){
$smarty->assign("tags",$tags);
} else {
$smarty->assign("tags","");
}
}
getRating($movie_id)
有人能帮我吗,因为我是php新手。在看不到其余代码的情况下,不清楚问题出在哪里,但似乎您正在为一个类实例化
$movie
,然后将$movie
指定为数组。这不太好,因为数组$movie
赋值只会删除类$movie
赋值
我建议重命名类变量或数组。以下是重命名为$movie\u数组的数组:
$movie_array = $movie->getByPerma($perma,$language);
if (empty($movie_array)){
$movie_array = '';
} else {
$movie_array['rating'] = $movie->getRating($movie_array['id']);
$tags = $movie->getMovieCategoryDetails($movie_array['id'], $language);
if (count($tags)){
$smarty->assign("tags", $tags);
} else {
$smarty->assign("tags","");
}
}
这是重命名为$movie\u class
的类:
$movie = $movie_class->getByPerma($perma,$language);
if (empty($movie)){
$movie = '';
} else {
$movie['rating'] = $movie_class->getRating($movie['id']);
$tags = $movie_class->getMovieCategoryDetails($movie['id'], $language);
if (count($tags)){
$smarty->assign("tags", $tags);
} else {
$smarty->assign("tags","");
}
}
看起来像
$movie = $movie->getByPerma($perma,$language);
不返回对象,因此稍后在代码中调用
$movie['rating'] = $movie->getRating($movie['id']);
您正在对非对象调用函数。通过使用查看此行前面的$movie等于多少
var_dump($movie);
$movie=['rating'] = $movie->getRating($movie['id']);
但不确定,似乎是$movie=$movie->getByPerma($perma,$language)代码>未返回对象。尝试做var\u转储($movie)代码>
返回的不是对象的东西
所以我会
print_r($movie)
在第二行,看看我得到了什么
第二件事是:
$movie['rating'] = $movie->getRating($movie['id']);
在左侧使用$movie作为数组,在右侧使用它作为对象,然后再次发送使用$movie['id']作为数组的参数
因此:
如果要获取数组,则数组不能包含函数,该函数应位于类之外,并将按如下方式调用:
getRating($movie['id'])
伊斯蒂德
$movie->getRating($movie['id']).
如果您正在获取一个对象,并且该对象实现了该函数
public function getRating($movieid){
$movieid = mysql_real_escape_string($movieid);
$average = 0;
$e = mysql_query("SELECT AVG(`rating`) as average FROM movie_ratings WHERE movieid='$movieid'") or die(mysql_error());
if (mysql_num_rows($e)>0){
extract(mysql_fetch_array($e));
}
return $average;
}
$movie = $movie->getByPerma($perma,$language);
if (empty($movie)){
$movie = '';
} else {
$movie['rating'] = $movie->getRating($movie['id']);
$tags = $movie->getMovieCategoryDetails($movie['id'],$language);
if (count($tags)){
$smarty->assign("tags",$tags);
} else {
$smarty->assign("tags","");
}
}
getRating($movie_id)
然后,访问对象属性的方法是:
$movie->rating and $movie->id
我想这些财产是公开的。但这不是正确的方法。。。属性应该是私有的,您应该为对象属性实现getter和setter,如下所示:
private $rating;
public function get_rating()
{
return $this->rating;
}
$movie->set_rating($some_rating);
在这种情况下,要获得评级,请使用
$movie->get_rating();
要为评级指定一个值,请执行
public function set_rating($r)
{
$this->rating=$r;
}
和如下所示的符号值:
private $rating;
public function get_rating()
{
return $this->rating;
}
$movie->set_rating($some_rating);
不知道我是否帮了忙或让一切变得更混乱了:但是请随意问我问题:)getByPerma
做了什么?你正在用一个数组覆盖你的$movie
对象,这个数组也称为$movie
,所以当你尝试调用getRating()
时,你正在该数组上调用它,因此,错误“在非对象上”。所以只需将数组赋给另一个变量即可。@Graham:Comment应该是答案……对于一个简单的问题,这是最好/详细的答案之一+1来自我的程序员同事