이는 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 개념의 구성과 비슷한 또 다른 솔루션 - go() 함수가 OBJ의 인스턴스를 만드는 역할을하도록합니다.
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
go()를 실행할 때마다 새로운 OBJ 인스턴스를 만들므로 이상적인 것은 아닙니다. 당신은 정적 변수
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
에 "캐시"이동 내부 OBJ의 인스턴스()에 의해이 문제를 해결할 수 그러나 당신이 다른 외에 어디 OBJ의 인스턴스를 사용하지 않는 경우이 구성 같은 접근 방식은 정말에만 유용 go() 함수 내부 - 다른 곳에서 사용하는 경우 매개 변수 방식이 최선의 선택입니다.
모든 작업에 적합한 솔루션을 선택하는 것이 중요합니다.
위대한 작품입니다. 고맙습니다! – Tim
세 번째 방법을 사용해 주셔서 감사합니다. – doflamingo