【问题标题】:Using $this when not in object context calling method inside class不在对象上下文中时使用 $this 调用类内的方法
【发布时间】:2015-07-28 07:49:01
【问题描述】:

我有这行代码从名为 Field 的类名中调用 buildField 的方法

$field_dictionary[$key] = Field::buildField($key, $request);

在 Field 类中,这里是我的 buildField 方法

public function buildField($key, $request) {

    $field_vocabulary = [];

    $image = $_FILES[$key];
    $image['tmp_name']['image'] = true;
    // Calling this another method from same class
    $field = $this->sanitizeFieldRows($image['tmp_name'], $request->post($key . '_name'), $request->post($key . '_description'));

    $field_vocabulary['name'] = implode('|', $field->field_1);
    $field_vocabulary['description'] = implode('|', $field->field_2);
    $field_vocabulary['image'] = implode('|', $field->reference);

    return $field_vocabulary;
}

在那段代码中,有一行

$field = $this->sanitizeFieldRows($image['tmp_name'], $request->post($key . '_name'), $request->post($key . '_description'));

我正在调用同一个类的另一个方法。它有一些我刚刚删除的功能,因为它太长了。

public function sanitizeFieldRows($reference, $field_1, $field_2 = null) {

    // Some code etc.....
    // Outputs an object
    return (object) $output;
}

但问题是,我正在调用$this->sanitizeFieldRows($par1,$par2,$par3),但它提示错误:

Using $this when not in object context in

但是当我执行Field::sanitizeFieldRows($par1,$par2,$par3) 时,它可以工作,但是这些方法在同一个对象中,但它不是我正在调用的静态方法。

这有什么问题吗?

同样的问题:

Using $this when not in object context?

Using $this when not in object context

Using $this when not in object context

PHP using $this when not in object context

Fatal error: Using $this when not in object context

Fatal error: Using $this when not in object context explanation?

Using $this when not in object context php

【问题讨论】:

  • 你实例化你的类了吗?如果您处于静态模式,则可以使用self::sanitizeFieldRows($par1,$par2,$par3)
  • ^ 感谢@Vincent Decaux,今天学到了一些东西。

标签: php class object


【解决方案1】:

由于 buildField 是一个静态方法,$this 变量在其范围内不可用。

因为静态方法可以在没有创建对象实例的情况下调用,所以伪变量 $this 在声明为静态的方法中不可用。

http://php.net/manual/en/language.oop5.static.php

【讨论】:

  • 哦,对了!我忘了这一点,想知道为什么我叫:: 而不是创建$field = new Field 的东西。傻我。
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 2015-02-12
  • 2023-03-22
  • 2016-10-03
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多