にこれは、OOPの問題ではありません)メンバ関数grabArray(に呼び出して、それはスコープの問題です。 $ 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のコンポジションのコンセプトに似た別のソリューション - あなたはOBJのインスタンスを作成するためのgo()関数を作成します。
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
あなたが行くを実行するたびに()ブランドの新しいOBJのインスタンスを作成したいので、これは、しかし、おそらく理想的ではありません。あなたは、静的変数
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
で「キャッシュ」、外出先内部OBJのインスタンス()によってこの問題を解決できた。しかし、あなたが他のほかのどこOBJのインスタンスを使用しない場合は、この構図のようなアプローチは、実際には便利ですgo()関数の内部 - 他の場所で使用する場合は、パラメータのアプローチが最適です。
これは、手近な課題に適したソリューションを選ぶことです。
素晴らしいです。ありがとうございました! – Tim
3番目の方法が大好き – doflamingo