2013-10-05 69 views
1

有誰知道jQuery函數和匿名函數是如何定義的?我正在嘗試在php中創建一個類,以便像在jquery中一樣使用。 例如:在php中的匿名函數類似於jquery

$('.blabla').click(function() 
{ 
    console.log($(this).attr('id'); 
}); 

,並在PHP中如何將類像這樣做呢?

$object->click(function() 
{ 
    var_dump($this->attr('id'); 
}); 

這是可能的嗎?即時通訊試圖瞭解匿名功能,所以我可以知道什麼時候才能真正使用它。

+0

它可能寫匿名fucntions檢查出這些... http://stackoverflow.com/questions/2412299/why-and-how-do-you-use-anonymous-functions-in-php – codebreaker

+3

你怎麼能點擊一個PHP對象? – undefined

+0

如果你的問題是關於該方法如何調用它作爲參數的函數,請參閱[變量函數]上的PHP文檔(http://php.net/manual/en/functions.variable-functions.php) – Barmar

回答

0

要打電話給你的方法接收作爲參數的功能,這將是這樣的:

function click($callback) { 
    // Do stuff... 
    $callback(); 
    // Do more stuff... 
} 

PHP沒有任何類似於JavaScript的特殊變量this$this只能用於類方法,不能用於其他函數。如果你想讓回調訪問那個變量,你應該把它作爲一個明確的參數傳遞。

0

是你可以在PHP 5.3或以上,你可以在這裏閱讀文檔: http://php.net/manual/en/functions.anonymous.php

它不工作,完全像JavaScript的艱難。 JavaScript是一種原型語言,php不是。

您可以在JavaScript中做到這一點:

var value = 'foo'; 
object.doSomething(function() { 
    console.log(value); 
}); 

你可以這樣做,因爲JavaScript函數有一個參考,以它的創造者。在PHP中,你不能。價值將超出範圍。

除此之外,它的工作類似。 例如,如果您想對數組或其他結構進行動態迭代。

function iterateOverArray($array, $function) { 
    foreach ($array as $key => $value) { 
     $function($key, $value); 
    } 
} 

該函數允許您遍歷數組並指定自己的操作。例如:

$array = array('foo', 'bar', 'FOBAR'); 
iterateOverArray($array, function ($key, $value) { 
    echo $key . ' => ' . $value; 
}); 

這對修改複雜結構非常有用。但這是我在php中使用匿名函數的唯一情況。但也許這是因爲它仍然是一種新的PHP。