Đây không phải là một vấn đề OOP, đó là một vấn đề phạm vi. $ obj không hiển thị bên trong hàm go(). Bạn có thể cần phải vượt qua nó như một tham số, hoặc đưa nó vào phạm vi của hàm với từ khóa toàn cầu (không khuyến khích)
Đề xuất cách
$obj = new OBJ();
go('http://www.mysite.com/hello', $obj);
function go($url, $object)
{
$array = $object->grabArray($url);
echo $array['hits'];
}
Not Recommended cách
$obj = new OBJ();
go('http://www.mysite.com/hello');
function go($url)
{
global $obj;
$array = $object->grabArray($url);
echo $array['hits'];
}
Có một giải pháp khác tương tự như khái niệm OOP về bố cục - bạn sẽ làm cho hàm go() chịu trách nhiệm tạo ra một thể hiện của OBJ.
go('http://www.mysite.com/hello');
function go($url)
{
$obj = new OBJ();
$array = $obj->grabArray($url);
echo $array['hits'];
}
Điều này có lẽ không lý tưởng vì bạn sẽ tạo một cá thể OBJ hoàn toàn mới mỗi khi bạn thực hiện go(). Bạn có thể sửa lỗi này bằng "bộ nhớ đệm" trường hợp của OBJ bên đi() với một biến tĩnh
function go($url)
{
static $obj;
if (is_null($obj))
{
$obj = new OBJ();
}
$array = $obj->grabArray($url);
echo $array['hits'];
}
Nhưng phương pháp thành phần giống như này thực sự chỉ hữu ích nếu bạn không sử dụng bạn thể hiện của OBJ bất cứ nơi nào khác ngoài bên trong hàm go() - nếu bạn sử dụng nó ở nơi khác, thì cách tiếp cận tham số là lựa chọn tốt nhất.
Đó là tất cả về việc chọn giải pháp phù hợp cho nhiệm vụ trong tầm tay!
Nguồn
2009-05-20 19:45:47
Hoạt động tuyệt vời. Cảm ơn bạn! – Tim
Yêu phương thức thứ ba cảm ơn – doflamingo