2009-05-20 19 views
6

Quindi non sono in OOP in PHP.Chiama un oggetto all'interno di una funzione

Ecco il mio problema Ho un oggetto da cui posso chiamare una funzione e che restituisce un arrary. Quindi ecco il codice.

$obj = new OBJ(); 

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

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

Questo mi dà l'errore

Fatal error: chiamata a una funzione membro grabArray() su un non-oggetto

risposta

35

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!

+0

Funziona alla grande. Grazie! – Tim

+0

Ama il terzo metodo grazie – doflamingo

Problemi correlati