在Javascript中有call()
和apply()
,部分地,但在PHP中解析为call_user_func()
和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
。
答案 0 :(得分:3)
您可以尝试通过引用传递它:http://php.net/manual/en/language.references.pass.php
function Example (&$obj) {
$obj->callFunction();
}
答案 1 :(得分:3)
实例化对象的方法作为包含索引0处的对象和索引1处的方法名称的数组传递。
以下示例:
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
答案 2 :(得分:2)
从PHP5.4开始,可以将对象绑定到充当$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);
瞧! PHP中的完整$this
支持。但是,它只适用于闭包。