【问题标题】:anonymous function in php similar like jqueryphp中的匿名函数类似于jquery
【发布时间】:2013-10-12 07:26:39
【问题描述】:

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

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

在 php 中,类会如何做呢?

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

这可能吗?我试图理解匿名函数,以便我知道何时真正使用它。

【问题讨论】:

标签: php jquery closures anonymous-function


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    是的,您可以在 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 中仍然是一种新事物。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 2012-09-03
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多