這不是一個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