Ich habe diese Methode, in der ich $ this verwenden möchte, aber alles, was ich bekomme, ist: Schwerwiegender Fehler: Verwenden von $ this, wenn nicht im Objektkontext.
Wie kann ich das zum Laufen bringen?
public static function userNameAvailibility()
{
$result = $this->getsomthin();
}
php
oop
this
static-methods
Jom
quelle
quelle
static::
statt seinself::
?Sie können nicht
$this
innerhalb einer statischen Funktion verwenden, da statische Funktionen unabhängig von instanziierten Objekten sind. Versuchen Sie, die Funktion nicht statisch zu machen.Bearbeiten : Per Definition können statische Methoden ohne instanziiertes Objekt aufgerufen werden, und daher gibt es keine sinnvolle Verwendung
$this
innerhalb einer statischen Methode.quelle
Innerhalb der statischen Funktion können mit self :: nur statische Funktionen aufgerufen werden. Wenn Ihre Klasse eine nicht statische Funktion enthält, die Sie verwenden möchten, können Sie die Instanz derselben Klasse deklarieren und verwenden.
<?php class some_class{ function nonStatic() { //..... Some code .... } Static function isStatic(){ $someClassObject = new some_class; $someClassObject->nonStatic(); } } ?>
quelle
Der Accessor
this
bezieht sich auf die aktuelle Instanz der Klasse. Da statische Methoden nicht von der Instanz ausgeführt werden, ist die Verwendungthis
gesperrt. Man muss also die Methode direkt hier aufrufen. Die statische Methode kann nicht auf etwas im Bereich der Instanz zugreifen, sondern auf alles im Klassenbereich außerhalb des Instanzbereichs.quelle
Schade, dass PHP keinen ausreichend beschreibenden Fehler aufweist. Sie können $ this-> nicht in einer statischen Funktion verwenden, sondern self ::, wenn Sie eine Funktion innerhalb derselben Klasse aufrufen müssen
quelle
Hier ist ein Beispiel dafür, was passiert, wenn eine Methode einer Klasse falsch aufgerufen wird. Sie werden einige Warnungen sehen, wenn Sie diesen Code ausführen, aber er wird funktionieren und Folgendes ausgeben: "Ich bin A: B-Eigenschaft drucken". (In php5.6 ausgeführt)
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();
Es scheint, dass die Variable $ this, die in einer Methode verwendet wird, die als statische Methode aufgerufen wird, auf die Instanz der Klasse "caller" verweist. Im obigen Beispiel wird in der A-Klasse die Eigenschaft $ this-> verwendet, die auf eine Eigenschaft des B verweist.
BEARBEITEN:
quelle
Bei der statischen Methode beziehen sich die Eigenschaften auf die Klasse und nicht auf das Objekt. Aus diesem Grund ist der Zugriff auf statische Methoden oder Features möglich, ohne dass ein Objekt erstellt werden muss. $ Dies bezieht sich auf ein Objekt aus einer Klasse, aber $ self bezieht sich nur auf dieselbe Klasse.
quelle