在JS中,在定义对象时,如果其中一个对象属性是函数,则使用该函数中的this
关键字将返回您正在使用的当前对象。如果您想要检索同一对象中其他属性的值,这非常有用。
例如:
// Javascript Code
var val = 'I never get seen.';
var o = {
val: 'I do get seen!',
fun: function() {
// use `this` to reference the current object we are in!
return this.val;
}
};
// Outputs 'I do get seen!'
console.log(o.fun());
但是,我无法弄清楚如何在PHP中执行等效操作。我正在运行PHP 5.6,所以我可以访问匿名函数。这是我的示例代码:
<?php
// PHP Code
$val = 'I never get seen.';
$o = array(
'val' => 'I do get seen!',
'fun' => function() {
/**
* I've tried:
*
* return $this.val;
* return $this->val;
* return $this['val'];
* return this.val;
* return this->val;
* return this['val'];
*
* None of them work.
*/
return $this->val;
}
);
// Should output 'I do get seen!'
echo $o['fun']();
?>
修改
正如其他人指出的那样,我“应该”使用真正的类,并以这种方式访问类属性。
然而,在我工作的代码中,我没有做出改变范式的奢侈。如果没有替代选项,我会记住,在PHP中没有与这个想法完全一对一的等价物。
答案 0 :(得分:2)
如何在PHP中定义类:
class test {
private $val = "value";
function fun() {
return $this->val();
}
}
//instantiation:
$obj = new test();
echo $obj->fun();
PHP是一种实际上支持类的语言,不需要通过使用数组来处理所有内容
答案 1 :(得分:0)
重要的是要注意,你不能只使用一种语言(JS)中的所有东西,并将其“转换”为其他语言(PHP)。你实际上可以靠近using anonymous classes:
<?php
$o = new class {
public $val = 'I do get seen!';
public function fun() {
// use `this` to reference the current object we are in!
return $this->val;
}
};
var_dump($o->fun());
你是否应该这样做......我非常怀疑。
不同的语言(特别是基于原型和基于OOP的经典语言)只是做不同的事情。