Ce n'est pas un problème POO, il est une question de portée. $ obj n'est pas visible dans la fonction go(). Soit vous devez passer en tant que paramètre, ou l'amener dans le champ de la fonction avec le mot-clé global (non recommandé)
façon recommandée
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go($url, $object)
{
$array = $object->grabArray($url);
echo $array['hits'];
}
Pas de manière recommandée
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go($url)
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
Il y a une autre solution qui est similaire au concept de composition de la POO - vous devez rendre la fonction go() responsable de la création d'une instance de OBJ.
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
Ceci est probablement pas idéal, mais, puisque vous souhaitez créer une nouvelle instance OBJ chaque fois que vous avez exécuté go(). Vous pouvez résoudre ce problème en « cache » l'instance de OBJ intérieur go() avec une variable statique
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
Mais cette approche de composition semblable est vraiment utile que si vous n'utilisez pas votre instance de OBJ nulle part ailleurs qu'à à l'intérieur de la fonction go() - si vous l'utilisez ailleurs, l'approche paramétrique est le meilleur choix.
Il s'agit de choisir la bonne solution pour la tâche à accomplir!
Fonctionne très bien. Je vous remercie! – Tim
Aime la troisième méthode merci – doflamingo