Это не проблема ООП, это проблема объема. $ obj не виден внутри функции go (). Вам нужно либо передать его в качестве параметра, либо ввести в область действия функции с помощью ключевого слова global (не рекомендуется)
Рекомендуемый способ
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go( $url, $object )
{
$array = $object->grabArray($url);
echo $array['hits'];
}
Не рекомендуется
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go( $url )
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
Есть еще одно решение, аналогичное концепции компоновки ООП - вы бы возложили на функцию go () ответственность за создание экземпляра OBJ.
go('http://www.mysite.com/hello');
function go( $url )
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
Это, вероятно, не идеально, так как вы будете создавать новый экземпляр OBJ каждый раз, когда выполняете go (). Это можно исправить, "кэшировав" экземпляр OBJ внутри go () со статической переменной
function go( $url )
{
static $obj;
if ( is_null( $obj ) )
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
Но подобный композиционный подход действительно полезен только в том случае, если вы не используете свой экземпляр OBJ где-либо еще, кроме как внутри функции go () - если вы используете его в другом месте, тогда подход с использованием параметров - лучший выбор.
Это все о выборе правильного решения для задачи под рукой!