Esto no es un problema programación orientada a objetos, es un problema de ámbito. $ obj no está visible dentro de la función go(). O hay que hacer pasar como un parámetro, o ponerla en el alcance de la función con la palabra clave mundial (no se recomienda)
forma recomendada
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go($url, $object)
{
$array = $object->grabArray($url);
echo $array['hits'];
}
forma no recomendada
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go($url)
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
Hay otra solución que es similar al concepto de composición de OOP: usted haría que la función go() fuera responsable de crear una instancia de OBJ.
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
Ésta es probablemente no es ideal, sin embargo, ya que crearía una marca nueva instancia OBJ cada vez que se ejecutó Go(). Se podría solucionar este problema "caching" la instancia de OBJ dentro go() con una variable estática
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
Pero este enfoque composición similar es realmente sólo es útil si usted no usa la instancia de OBJ en otro sitio aparte dentro de la función go() - si lo usa en otro lugar, entonces el enfoque de parámetros es la mejor opción.
¡Todo se trata de elegir la solución adecuada para la tarea en cuestión!
Funciona muy bien. ¡Gracias! – Tim
Amo el tercer método gracias – doflamingo