Questo non è un problema OOP, si tratta di un problema di portata. $ obj non è visibile all'interno della funzione go(). Si sia bisogno di passare come parametro, o portarlo in ambito della funzione con la parola chiave globale (non raccomandato)
modo consigliato
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go($url, $object)
{
$array = $object->grabArray($url);
echo $array['hits'];
}
modo non raccomandato
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go($url)
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
C'è un'altra soluzione che è simile al concetto di composizione OOP - renderebbe la funzione go() responsabile della creazione di un'istanza di OBJ.
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
Questo è probabilmente non è l'ideale, però, dal momento che ci si crea una nuova istanza di OBJ ogni volta che si eseguisse go(). Si potrebbe risolvere questo problema "caching" l'istanza di OBJ all'interno go() con una variabile statica
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
Ma questo approccio composizione simile è veramente utile solo se non si utilizza l'istanza di OBJ altrove oltre all'interno della funzione go() - se lo usi altrove, l'approccio ai parametri è la scelta migliore.
Si tratta di scegliere la soluzione giusta per l'attività da svolgere!
fonte
2009-05-20 19:45:47
Funziona alla grande. Grazie! – Tim
Ama il terzo metodo grazie – doflamingo