$movie->getByPerma($perma,$language);
está devolviendo algo que no es un objeto.
Entonces lo haría
print_r($movie)
en la línea 2 y mira lo que obtengo.
La segunda cosa extraña está en:
$movie['rating'] = $movie->getRating($movie['id']);
En el lado izquierdo, está usando $movie como una matriz y en el lado derecho lo está usando como un objeto y luego envió nuevamente el parámetro que usa $movie['id'] como una matriz.
Entonces:
Si obtiene una matriz, la matriz no puede tener funciones, la función debe estar fuera de una clase y se llamará así:
getRating($movie['id'])
en lugar de
$movie->getRating($movie['id']).
Si obtiene un objeto y el objeto implementa la función
getRating($movie_id)
entonces la forma de acceder a las propiedades del objeto es:
$movie->rating and $movie->id
Supongo que las propiedades se declaran públicas. Sin embargo, esta no es la forma correcta de hacerlo... Las propiedades deben ser privadas y debe implementar captadores y definidores para las propiedades de los objetos como esta:
private $rating;
public function get_rating()
{
return $this->rating;
}
En este caso, para obtener la calificación, use
$movie->get_rating();
Y para asignarle un valor a la calificación, implementa
public function set_rating($r)
{
$this->rating=$r;
}
Y asigne un valor como este:
$movie->set_rating($some_rating);
No sé si ayudé o hice todo más confuso :S pero siéntete libre de hacerme preguntas :)