1

jquery関数と匿名関数がどのように定義されているか知っている人はいますか? jqueryと同じようにphpで小さなクラスを作成しようとしています。例えば:

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

そしてphpでは、クラスはこれをどのように行うのでしょうか?

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

これは可能ですか?匿名関数を理解しようとしているので、実際にいつ使用するかを知ることができます。

4

2 に答える 2

1

メソッドが引数として受け取る関数を呼び出すには、次のようにします。

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

PHP には、Javascript の特殊変数に相当するものはありませんthis$thisクラス メソッドでのみ使用でき、他の関数では使用できません。コールバックがその変数にアクセスできるようにする場合は、明示的な引数として渡す必要があります。

于 2013-10-05T08:54:33.307 に答える
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ではまだ新しいものだからです。

于 2013-10-05T08:55:31.943 に答える