php中的匿名函数类似于jquery

时间:2013-10-05 08:43:26

标签: php jquery closures anonymous-function

有谁知道如何定义jquery函数和匿名函数?我试图在PHP中创建一个小类,以与jquery中相同的方式使用。 例如:

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

在php中,这个班级会怎么样?

$object->click(function()
{
   var_dump($this->attr('id');
});
这可能吗?我试图了解匿名函数,以便我知道何时真正使用它。

2 个答案:

答案 0 :(得分:0)

要调用您的方法接收的函数作为参数,它将是这样的:

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

PHP没有类似于Javascript的特殊变量this的任何内容。 $this只能在类方法中使用,而不能在其他函数中使用。如果您希望回调能够访问该变量,则应将其作为显式参数传递。

答案 1 :(得分: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中仍然是一种新的东西。