【问题标题】:PHP Equivalent of JavaScript "this" keyword, specifically within an object?PHP 等效于 JavaScript“this”关键字,特别是在对象中?
【发布时间】:2016-02-10 17:08:10
【问题描述】:

在 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 中没有与此想法完全对应的一对一。

【问题讨论】:

  • 你应该注意到 PHP 实际上有 class 关键字来定义一个类。并非所有东西都是数组。
  • 我不完全确定您的方法是否正确。在 PHP 中,$this 用于类/对象的上下文中。
  • PHP 和 JS 是不同的语言。并非一切都是对象...
  • 在您发布的代码示例中,echo $o['val']; 应该为您提供所需的内容。不过,您可能仍然会遇到一些其他语法错误。

标签: javascript php class object this


【解决方案1】:

如何在 PHP 中定义一个类:

class test {
  private $val = "value";
  function fun() {
    return $this->val();
  }
}
//instantiation:
$obj = new test();
echo $obj->fun();

PHP 是一种实际上支持类的语言,并且不必对所有内容都使用数组来欺骗

【讨论】:

  • JS 有类,虽然是原型,但最近在语言规范中引入了类语法。
  • 我承认,这个词的选择有点争议,但我认为我们不必开始讨论 JS 做和不做的奇怪事情
  • romellen,这是您问题的正确答案,您可以将其标记为这样。
【解决方案2】:

请务必注意,您不能只使用一种语言 (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 的语言)只是做不同的事情。

【讨论】:

  • 我知道并非一种语言的所有特征都存在于其他语言中,我想问在这种情况下,这个特征是否确实存在。不过还是谢谢你的回复,很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多