当不在对象上下文中调用方法时,使用$ this

时间:2015-07-28 07:49:01

标签: php class object

我有这行代码从名为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

1 个答案:

答案 0 :(得分:2)

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

  

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

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