2009-05-20 43 views
6

Vì vậy, tôi không phải là OOP trong PHP.Gọi một đối tượng bên trong một hàm

Đây là vấn đề của tôi Tôi có một đối tượng mà tôi có thể gọi một hàm từ và nó cung cấp trở lại một arrary. Đây là mã.

$obj = new OBJ(); 

function go($url){ 
    $array = $obj->grabArray($url); 
    echo $array['hits']; 
} 

go('http://www.mysite.com/hello'); 

này mang lại cho tôi những lỗi

Fatal error: Call to một hàm thành viên grabArray() trên một tổ chức phi vật thể

Trả lời

35

Đâ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!

+0

Hoạt động tuyệt vời. Cảm ơn bạn! – Tim

+0

Yêu phương thức thứ ba cảm ơn – doflamingo

Các vấn đề liên quan