在静态函数中使用这个失败
我有这个方法,我想使用$ this,但我得到的是:致命的错误:使用$ this时不在对象上下文中。
我怎样才能使这个工作?
public static function userNameAvailibility() { $result = $this->getsomthin(); }
这是正确的方法
public static function userNameAvailibility() { $result = self::getsomthin(); }
对于静态方法,使用self::
而不是$this->
。
请参阅: PHP静态方法教程更多信息:)
你不能在静态函数中使用$this
,因为静态函数是独立于任何实例化对象的。 尝试使该function不是静态的。
编辑 :根据定义,静态方法可以被调用,没有任何实例化对象,因此在静态方法中没有$this
有意义的用法。
访问者指的是当前类的实例。 由于静态方法不能运行实例,所以使用this
是被禁止的。 所以需要直接在这里调用方法。 静态方法不能访问实例范围内的任何内容,而访问实例范围外的类范围内的所有内容。
只有静态函数可以在静态函数中使用self ::调用,如果你的类包含非静态函数,那么你可以声明同一个类的实例并使用它。
<?php class some_class{ function nonStatic() { //..... Some code .... } Static function isStatic(){ $someClassObject = new some_class; $someClassObject->nonStatic(); } } ?>
很遗憾,PHP没有显示足够的描述性错误。 你不能在一个静态函数中使用$ this->,而是使用self ::如果你必须在同一个类中调用一个函数
下面是一个以错误的方式调用类的方法时会发生什么的例子。 执行此代码时,您将看到一些警告,但它将起作用并将打印:“我是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();
它接受variables$ this,在被称为静态方法的方法中使用,它指向“调用者”类的实例。 在上面的例子中,在A类中使用了$ this->属性,它指向了B的一个属性。