2010-12-28 37 views
15
class theClass{ 
     function doSomeWork($var){ 
      return ($var + 2); 
     } 

     public $func = "doSomeWork"; 

     function theFunc($min, $max){ 
      return (array_map(WHAT_TO_WRITE_HERE, range($min, $max))); 
     } 
    } 

$theClass = new theClass; 
print_r(call_user_func_array(array($theClass, "theFunc"), array(1, 5))); 
exit; 

Có thể cho biết bất kỳ điều gì tôi có thể viết tại WHAT_TO_WRITE_HERE, do đó hàm doSomeWork nhận được tham số đầu tiên là array_map. và mã hoạt động đúng.Phương thức chuyển đối tượng vào mảng_map()

Và đưa ra đặt như

Array 
(
    [0] => 3 
    [1] => 4 
    [2] => 5 
    [3] => 6 
    [4] => 7 
) 
+0

Nó sẽ làm việc nếu bạn chỉ cần viết tên hàm đó, "doSomeWork " –

+1

' mảng ($ this, $ this-> func) 'sẽ làm việc, khi truyền một đối tượng bạn cần truyền vào một mảng trong đó arg đầu tiên là đối tượng và đối tượng thứ hai là phương thức trong đối tượng' mảng ([đối tượng [], function]) ' – RobertPitt

Trả lời

27

Để sử dụng phương pháp đối tượng với array_map(), vượt qua một mảng chứa các trường hợp đối tượng và tên phương pháp. Đối với phạm vi cùng một đối tượng, sử dụng $this như bình thường. Vì tên phương thức của bạn được xác định trong thuộc tính public $func của bạn, bạn có thể vượt qua $this->func. Điều này áp dụng cho hầu hết các hàm chấp nhận một đối số callback.

Lưu ý phụ, dấu ngoặc đơn bên ngoài array_map() là không cần thiết.

return array_map(array($this, $this->func), range($min, $max)); 
+13

Tôi không biết rằng ngay cả cú pháp _this_ đã hoạt động. Nhưng, vì bạn đã nói "function ** name **", một thay thế là 'array_map (mảng ($ this, 'func'), phạm vi ($ min, $ max))'. – nevvermind

+0

@nush: Tôi đã đề cập đến tên hàm như trong chuỗi '" doSomeWork "', không phải là tên của thuộc tính '$ func'. – BoltClock

+1

bạn nói đúng. Tôi không chú ý đến mã. PS: Đó là tôi trả lời rất nhanh. Chúc mừng. – nevvermind

1

Đoạn mã dưới đây cung cấp một loạt các email từ một mảng $users trong đó có trường hợp của một lớp học với một phương pháp getEmail:

if(count($users) < 1) { 
     return $users; // empty array 
    } 
    return array_map(array($users[0], "getEmail"), $users); 
Các vấn đề liên quan