3

Javascript にはcall()andがありますがapply()、部分的には PHP ではcall_user_func()andに解決されます。call_user_func_array()

ここでの違いは、変数を渡すことができcall()、関数スコープ内apply()で使用できることです。this

PHPでこのようなことを達成できますか?

アップデート:

Javascript の場合:

var x = function(passed)
{
    return { dis : this, passd : passed };
};

console.log(x(44)); // window, 44

console.log(x.call(25, 44)); // 25, 44

.call()関数スコープ内の最初のパラメーターは、 になりthisます。

4

3 に答える 3

3

あなたはそれを参照によって渡すことを試みることができます:http://php.net/manual/en/language.references.pass.php

function Example (&$obj) {
    $obj->callFunction();
}
于 2012-05-15T13:14:56.823 に答える
3

CallbacksPHP マニュアルから:

インスタンス化されたオブジェクトのメソッドは、インデックス 0 のオブジェクトとインデックス 1 のメソッド名を含む配列として渡されます。

以下の例:

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
于 2012-05-15T13:20:26.507 に答える
2

PHP5.4 の時点で、オブジェクトを として機能する Closures にバインドすることが可能$thisです。

参照: http://lv.php.net/manual/en/closure.bindto.php

コード:

<?php

$object = new StdClass;

$closure = function($a)
{
    $this->a = $a;

    return $this;
};

// Here, we bind it.
$closure = $closure->bindTo($object);

// Tests.
$out = $closure('this is "a"')->a;

var_dump($object, $out);

出来上がり!$thisPHP での完全なサポート。ただし、クロージャーでのみ機能します。

于 2013-10-24T06:57:47.220 に答える