$movie->getByPerma($perma,$language);
está retornando algo que não é um objeto.
Então eu faria
print_r($movie)
na linha 2 e veja o que estou recebendo.
A segunda coisa estranha está em:
$movie['rating'] = $movie->getRating($movie['id']);
No lado esquerdo você está usando $movie como um array e no lado direito você o está usando como um objeto e então novamente você enviou o parâmetro que você usa $movie['id'] como um array.
Então:
Se você está recebendo um array, o array não pode ter funções, a função deve estar fora de uma classe e será chamada assim:
getRating($movie['id'])
em vez de
$movie->getRating($movie['id']).
Se você está obtendo um objeto e o objeto implementa a função
getRating($movie_id)
então a maneira de acessar as propriedades do objeto é:
$movie->rating and $movie->id
Estou assumindo que as propriedades são declaradas públicas. Esta não é a maneira correta de fazer isso... As propriedades devem ser privadas e você deve implementar getters e setters para as propriedades dos objetos assim:
private $rating;
public function get_rating()
{
return $this->rating;
}
Neste caso, para obter a classificação, use
$movie->get_rating();
E para atribuir um valor à classificação, implemente
public function set_rating($r)
{
$this->rating=$r;
}
E atribua valor assim:
$movie->set_rating($some_rating);
Não sei se ajudei ou deixei tudo mais confuso :S mas sinta-se à vontade para me fazer perguntas :)