2010-10-01 35 views
30

如果我使用array_walk類函數中調用同一類如何使用類方法作爲回調函數?

class user 
{ 
    public function getUserFields($userIdsArray,$fieldsArray) 
    { 

    if((isNonEmptyArray($userIdsArray)) && (isNonEmptyArray($fieldsArray))) 
    { 
     array_walk($fieldsArray, 'test_print'); 
    } 
    } 


    private function test_print($item, $key) 
    { 
     //replace the $item if it matches something 
    } 

} 

它給了我下面的錯誤的另一個功能 -

警告:array_walk() [function.array步行]:無法調用 test_print() - 函數不存在...

所以,我怎麼指定$this->test_print() WH使用array_walk()

+0

任何你創建函數'isNonEmptyArray'而不是使用'!empt Y(...)'? – 2010-10-01 14:59:22

+0

是的,只有當參數是一個至少有一個非空值的數組時,它纔會返回true – 2010-10-01 15:02:31

回答

58

如果要指定一個類方法作爲回調,你需要指定對象時,它屬於:

array_walk($fieldsArray, array($this, 'test_print')); 

manual

實例化對象的方法作爲包含索引0處的對象和索引1處的方法名稱的數組傳遞。

檢出http://www.ideone.com/oz3Ma以查看這在行動。

+0

是的,我之前嘗試過,但它給了我這個錯誤 - 'Warning:array_walk()[function.array-walk:Unable to call Array() - 函數不存在'然而,這是工作'array_walk($ fieldsArray,'user :: test_print');'。那麼,什麼是錯的。我想用'$ this' – 2010-10-01 14:54:46

+0

什麼版本的PHP? – tj111 2010-10-01 14:59:43

+1

你可以顯示不起作用的確切代碼(即發出警告)嗎? – ircmaxell 2010-10-01 15:01:40

5

如果您需要調用一個靜態方法沒有實例化類,你可以這樣做:

// since PHP 5.3 
array_walk($fieldsArray, 'self::test_print'); 

或者從外面:

// since PHP 5.5 
array_walk($fieldsArray, User::class.'::test_print'); 
1

要調用類方法,如在另一個回調函數你應該這樣做:

public function compareFucntion() { 
} 

public function useCompareFunction() { 
    usort($arrayToSort, [$this, 'compareFucntion']) 
} 
相關問題