87

我有这个方法,我想在其中使用 $this,但我得到的是:致命错误:不在对象上下文中使用 $this。

我怎样才能让它工作?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}
4

7 回答 7

153

这是正确的方法

public static function userNameAvailibility()
{
     $result = self::getsomthin();
}

使用而self::不是静态方法$this->

有关更多信息,请参阅:PHP 静态方法教程:)

于 2010-02-18T06:24:21.767 回答
15

您不能$this在静态函数内部使用,因为静态函数独立于任何实例化对象。尝试使函数不是静态的。

编辑$this:根据定义,可以在没有任何实例化对象的情况下调用静态方法,因此在静态方法内部没有有意义的使用。

于 2010-02-18T06:22:22.567 回答
6

只能使用 self:: 在静态函数中调用静态函数,如果您的类包含要使用的非静态函数,则可以声明同一类的实例并使用它。

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>
于 2013-10-01T20:59:07.953 回答
3

访问器this引用类的当前实例。由于静态方法不会在实例之外运行,this因此禁止使用。所以这里需要直接调用该方法。静态方法不能访问实例范围内的任何内容,但可以访问实例范围外的类范围内的所有内容。

于 2010-02-18T06:23:29.537 回答
1

遗憾的是 PHP 没有显示足够描述性的错误。您不能在静态函数中使用 $this->,如果必须在同一个类中调用函数,请使用 self::

于 2017-02-16T13:26:43.480 回答
1

这是一个以错误方式调用类的方法时发生的情况的示例。执行此代码时您会看到一些警告,但它会起作用并打印:“我是 A:打印 B 属性”。(在php5.6中执行)

class A {
    public function aMethod() {
        echo "I'm A: ";
        echo "printing " . $this->property;
    }
}

class B {
    public $property = "B property";

    public function bMethod() {
        A::aMethod();
    }
}

$b = new B();
$b->bMethod();

它接缝的是,在作为静态方法调用的方法中使用的变量 $this 指向“调用者”类的实例。在上面的示例中,A 类中使用了 $this->property,它指向 B 的属性。

编辑:

当从对象上下文中调用方法时,伪变量 $this 可用。$this 是对调用对象的引用(通常是该方法所属的对象,但如果该方法是从辅助对象的上下文中静态调用的,则可能是另一个对象)。 PHP > 基础

于 2017-05-17T08:28:12.030 回答
1

在静态方法中,属性是针对类的,而不是针对对象的。这就是为什么无需创建对象就可以访问静态方法或特性的原因。$this 指的是由一个类组成的对象,但 $self 只指同一个类。

于 2020-05-13T10:38:47.087 回答