在静态函数中使用它会失败

时间:2010-02-18 06:18:53

标签: php oop this static-methods

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

我怎样才能让它发挥作用?

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

7 个答案:

答案 0 :(得分:110)

这是正确的方法

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

使用self::代替$this-> 静态方法

有关详细信息,请参阅: PHP Static Methods Tutorial :)

答案 1 :(得分:12)

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

修改: 根据定义,可以在没有任何实例化对象的情况下调用静态方法,因此在静态方法中没有有意义地使用$this

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>

答案 4 :(得分: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-&gt;属性,该属性指向B的属性。

修改

  

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

答案 5 :(得分:1)

在静态方法中,属性用于类,而不是对象。 这就是为什么无需创建对象就可以访问静态方法或功能的原因。 $ this指的是由类组成的对象,但是$ self仅指相同的类。

答案 6 :(得分:0)

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