Wywołanie obiektu wewnątrz funkcji

więc nie musi OOP w PHP.

oto mój problem mam obiekt, z którego mogę wywołać funkcję i zwraca arrary. Oto kod.

$obj = new OBJ();

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

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

To daje mi błąd

błąd krytyczny: wywołanie funkcji-członka grabArray () na obiekcie


to nie jest problem OOP,to problem dziedzinie. $obj nie jest widoczna wewnątrz funkcji go (). Albo trzeba go przekazać jako parametr, albo wpisać go w obszar działania funkcji z globalnym słowem kluczowym (nie zalecane)

zalecane

$obj = new OBJ();

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

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

nie jest zalecane

$obj = new OBJ();

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

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

jest jeszcze jedno rozwiązanie, które wydaje się na koncepcję utworu OOP - można by zrobili funkcji go() odpowiedzialnej za tworzenie instancji PARAMETR OBJ.

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

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

to chyba nie jest idealne, chociaż, tak jak utworzysz nowy egzemplarz OBJ każdym razem, gdy wykonujesz go(). Można naprawić to, "służące do buforowania" wystąpienie OBJ inside go () ze zmiennej statycznej

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

ale ten kompozycji podejście jest naprawdę dobre, tylko jeśli nie używasz swój egzemplarz OBJ gdzie indziej, oprócz funkcji go () - jeśli używasz go w innym miejscu, to podejście parametrów jest najlepszym wyborem.

to wszystko o wyborze odpowiedniego rozwiązania dla konkretnego zadania!