2009-05-20 6 views
6

Donc je ne suis pas à OOP en PHP.Appel d'un objet à l'intérieur d'une fonction

Voici mon problème J'ai un objet que je peux appeler une fonction de et il fournit une réserve. Alors voici le code.

$obj = new OBJ(); 

function go($url){ 
    $array = $obj->grabArray($url); 
    echo $array['hits']; 
} 

go('http://www.mysite.com/hello'); 

Cela me donne l'erreur

Erreur fatale: Appel à une fonction de membre grabArray() sur un non-objet

Répondre

35

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!

+0

Fonctionne très bien. Je vous remercie! – Tim

+0

Aime la troisième méthode merci – doflamingo

Questions connexes