这不是一个OOP的问题上,这是一个范围的问题。 $ obj在函数go()中不可见。您可能需要在把它作为一个参数,或与全球关键字(不推荐)
推荐方式
$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'];
}
有把它纳入功能的范围另一种类似于组合OOP概念的解决方案 - 您将使go()函数负责创建OBJ实例。
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
虽然这可能并不理想,因为每次执行go()时都会创建一个全新的OBJ实例。您可以通过“缓存” OBJ的往里走的实例()用一个静态变量
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
解决这个问题,但这种成分类似的做法真的是唯一有用的,如果你不使用你的OBJ的情况下其他任何地方,除了在go()函数内部 - 如果你确实在其他地方使用它,那么参数方法是最好的选择。
这是关于为手头的任务选择正确的解决方案!
工程很棒。谢谢! – Tim 2009-05-20 21:39:49