gpt4 book ai didi

php - 调用非对象的成员函数 - PHP

转载 作者:行者123 更新时间:2023-11-29 05:25:59 25 4
gpt4 key购买 nike

有人可以显示、修复或告诉我为什么会出现此错误吗

在非对象上调用成员函数 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","");
}

}

有人可以帮助我吗,因为我是 php 的新手。

最佳答案

$movie->getByPerma($perma,$language); 

返回的不是对象。

所以我会

print_r($movie)

在第 2 行,看看我得到了什么。

第二个奇怪的事情是:

$movie['rating'] = $movie->getRating($movie['id']);

在左侧,您将 $movie 用作数组,在右侧,您将其用作对象,然后您再次发送参数,将 $movie['id'] 用作数组。

所以:

如果你得到一个数组,数组不能有函数,函数应该在类之外,并且会像这样调用:

getRating($movie['id']) 

代替

$movie->getRating($movie['id']).

如果你正在获取一个对象,并且该对象实现了函数

getRating($movie_id)

那么访问对象的属性的方式是:

$movie->rating and $movie->id

我假设这些属性是公开的。但这不是正确的做法......属性应该是私有(private)的,你应该像这样为对象属性实现 getter 和 setter:

 private $rating;
public function get_rating()
{
return $this->rating;
}

在这种情况下要获得评分,请使用

 $movie->get_rating();

并为评分赋值,实现

  public function set_rating($r)
{
$this->rating=$r;
}

然后像这样赋值:

$movie->set_rating($some_rating);

不知道我是否帮助或让一切变得更加困惑 :S 但请随时问我问题 :)

关于php - 调用非对象的成员函数 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com