In PHP sind statische und nicht statische Methoden zwei verschiedene Methoden in der objektorientierten Programmierung. Statische Methoden sind Klassenebene und müssen keine Objekte instanziieren, um aufgerufen zu werden. Sie werden häufig verwendet, um gemeinsame klassenbezogene Operationen zu verarbeiten und mithilfe des Schlüsselworts statisch identifiziert. Nichtstatische Methoden sind Instanzebene und müssen über Objektinstanzen aufgerufen werden, die normalerweise zum Betrieb von Instanzeigenschaften und anderen Instanzmethoden verwendet werden.
Statische Methoden können direkt auf statische Eigenschaften und statische Methoden in der Klasse ohne Instanzobjekte zugreifen. Nichtstatische Methoden können auf statische Eigenschaften und Methoden zugreifen und über $ this auch auf Instanzeigenschaften und Instanzmethoden zugreifen.
Da statische Methoden $ dies nicht verwenden können, um auf nicht statische Eigenschaften und Methoden zuzugreifen, können Sie die folgenden zwei Methoden verwenden, wenn Sie nicht statische Methoden aufrufen müssen:
Geben Sie die Instanzobjektparameter in die statische Methode ein und rufen Sie die nicht statische Methode über dieses Objekt auf:
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod($obj) {
$obj->hello();
}
}
$obj = new MyClass();
MyClass::accessNonStaticMethod($obj);
Diese Methode hängt davon ab, Objekte während des Anrufs zu übergeben, was etwas umständlich ist.
Instantieren Sie das aktuelle Klassenobjekt direkt in einer statischen Methode und rufen Sie dann eine nicht statische Methode auf:
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod() {
$obj = new self();
$obj->hello();
}
}
MyClass::accessNonStaticMethod();
Diese Methode erfordert keine externen Parameter und ist relativ einfach, hat jedoch nur begrenzte anwendbare Szenarien.
Hier ist ein vollständiges Beispiel, das zwei Implementierungen statischer Methoden demonstriert, die nicht statische Methoden aufrufen:
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod() {
$obj = new self();
$obj->hello();
// Sie können auch einen Objektaufruf übergeben
// $obj = new self();
// self::accessNonStaticMethod($obj);
}
}
MyClass::accessNonStaticMethod();
Es ist zu beachten, dass $ dies nicht zum Zugriff auf nicht statische Methoden innerhalb statischer Methoden verwendet werden kann, und Objektinstanzen müssen beim Aufrufen von nicht statischen Methoden unterstützt werden.
Statische Methoden und nicht-statische Methoden sind wichtige Komponenten der Objektorientierterprogrammierung von PHP. Statische Methoden können direkt statische Mitglieder aufrufen, während nicht statische Methoden von Instanzobjekten abhängen. Statische Methoden zum Zugriff auf nicht statische Methoden müssen durch Übergabe von Instanzen oder internen Instanziierungsobjekten implementiert werden, und $ Dies kann nicht direkt verwendet werden. In der tatsächlichen Entwicklung ist es der Schlüssel, die aufrufende Methode vernünftig zu wählen und den Code klar und gewartet zu halten.