Heim  >  Artikel  >  Backend-Entwicklung  >  Die Verwendung und der Unterschied zwischen statischen Klassen und statischen Variablen in PHP

Die Verwendung und der Unterschied zwischen statischen Klassen und statischen Variablen in PHP

怪我咯
怪我咯Original
2017-07-10 11:43:111176Durchsuche

Dieser Artikel stellt hauptsächlich den Unterschied zwischen der Verwendung statischer Klassen und statischer Variablen in PHP vor. Er analysiert die Definition, Funktion und Verwendungsfähigkeiten statischer Klassen und statischer Variablen in PHP detaillierter anhand von Beispielen it

Dieser Artikel analysiert den Unterschied zwischen der Verwendung statischer Klassen und statischer Variablen in PHP anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:

Statisch bedeutet, ein statisches Objekt oder eine statische Variable zu definieren. Was die Eigenschaften von Variablen oder Klassenmethoden betrifft, die durch Statik definiert werden, werden wir nach dem Lesen der relevanten Beispiele in diesem Artikel erfahren.

1. Erstellen Sie ein Objekt$object = new Class() und verwenden Sie dann „->“, um Folgendes aufzurufen: $object->attribute/function, vorausgesetzt, die Variable/Methode ist zugänglich.

2. Klassenmethoden/-variablen direkt aufrufen: class::attribute/function, ob statisch oder nicht statisch, aber es gibt Voraussetzungen.

A Variable, die Variable muss zugänglich sein

B. Wenn es sich um eine Methode handelt, muss sie zusätzlich zu den Anforderungen erfüllen Bei einer statischen Methode gibt es keine besonderen Bedingungen.

② Wenn es sich um eine nicht statische Methode handelt, muss geändert werden, dass $this in der Methode nicht verwendet wird, d. h. nicht statische Variablen/Methoden nicht aufgerufen. Natürlich ist es kein Problem, statische Variablen/Methoden aufzurufen.

Dann schauen wir uns die Verwendung von $object->… an und was sind die Unterschiede zwischen der Verwendung von class::…:

1. Wenn Sie $object->… verwenden, müssen Sie den

Konstruktor

ausführen, um ein Objekt zu erstellen.2. Verwenden Sie die Klasse: :... Rufen Sie statische Methoden auf /Variablen, ohne den Konstruktor auszuführen, um Objekte zu erstellen.

3. Verwenden Sie class::..., um nicht statische Methoden/Variablen aufzurufen, ohne den Konstruktor auszuführen, um Objekte zu erstellen.

Dann das Seltsame Da 2 und 3 gleich sind, welchen Sinn hat die Existenz statischer Methoden/Variablen?

Statisch statisch: Wenn Sie ein Klassenmitglied oder eine Methode als statisch deklarieren, können Sie direkt darauf zugreifen, ohne die Klasse zu instanziieren. Sie können nicht über ein Objekt auf die statischen Mitglieder zugreifen (außer auf statische Methoden). Die Klasse, nicht jede Objektinstanz, aber Objektinstanzen von Klassen können geteilt werden.

Beispiel: Der Code lautet wie folgt:


Führen Sie das Beispiel aus und geben Sie Folgendes aus:

China

Ich bin Chinese

Ich bin Chinese
<?php 
Class Person{ 
    // 定义静态成员属性 
    public static $country = "中国"; 
    // 定义静态成员方法 
    public static function myCountry() { 
        // 内部访问静态成员属性 
        echo "我是".self::$country."人<br />"; 
    } 
} 
class Student extends Person { 
    function study() { 
        echo "我是". parent::$country."人<br />"; 
    } 
} 
// 输出成员属性值 
echo Person::$country."<br />";  // 输出:中国 
$p1 = new Person(); 
//echo $p1->country;   // 错误写法 
// 访问静态成员方法 
Person::myCountry();   // 输出:我是中国人 
// 静态方法也可通过对象访问: 
$p1->myCountry(); 
 
// 子类中输出成员属性值 
echo Student::$country."<br />"; // 输出:中国 
$t1 = new Student(); 
$t1->study();    // 输出:我是中国人 
?>
China

Ich bin Chinese

Zusammenfassung: An Greifen Sie auf statische Mitgliedseigenschaften oder Methoden innerhalb einer Klasse zu, verwenden Sie self :: (beachten Sie, dass nicht $slef), der Code lautet wie folgt:


Der Code lautet wie folgt:


Um auf die statischen Elementeigenschaften oder Methoden der übergeordneten Klasse in der Unterklasse zuzugreifen, verwenden Sie parent::( Hinweis nicht $parent). Der Code lautet wie folgt:

Der Code lautet wie folgt:
slef:: $country
slef:: myCountry()


Statische Mitglieder mit externem Zugriff

Attribute und Methoden

sind Klassennamen/Unterklassennamen ::, der Code lautet wie folgt:

parent:: $country
parent:: myCountry()

Der Code lautet wie folgt :
Aber auf statische Methoden kann auch über gewöhnliche Objekte zugegriffen werden.

Beispiel: Deklarieren Sie statische Variablen. Der Code lautet wie folgt:

Person::$country
Person::myCountry()
Student::$country
Der Code lautet wie folgt :



Beispiel, ein Beispiel für die Verwendung statischer Variablen. Der Code lautet wie folgt:

Der Code lautet wie folgt:
<?PHP 
   function foo(){ 
   static $int = 0;// correct 
   static $int = 1+2;   // wrong (as it is an expression) 
   static $int = sqrt(121); // wrong (as it is an expression too) 
   $int++; 
   echo $int; 
   } 
?>


Jetzt , jedes Mal, wenn die Test()-Funktion aufgerufen wird, wird der Wert von $w3sky ausgegeben und um eins erhöht.

Statische Variablen bieten auch eine Möglichkeit,

rekursive Funktionen
<?PHP 
   function Test() 
   { 
   static $w3sky = 0; 
   echo $w3sky; 
   $w3sky++; 
   } 
?>
, rekursive Funktionen, zu verarbeiten ist eine Funktion, die sich selbst aufruft. Seien Sie vorsichtig, wenn Sie rekursive Funktionen schreiben. Sie müssen sicherstellen, dass genügend Methoden vorhanden sind, um die Rekursion zu stoppen. Verwenden Sie die statische Variable $count um festzustellen, wo. Stoppen Sie, wann.

Beispiel, statische Variablen und rekursive Funktionen, der Code lautet wie folgt:

Der Code lautet wie folgt:


Hinweis: Statische Variablen können wie in der obigen Beispielanweisung gezeigt sein. Wenn das Ergebnis des

-Ausdrucks

zum Zuweisen in der Anweisung verwendet wird, führt dies zu einem Analysefehler


In PHP gibt es zwei Möglichkeiten, auf Klassenmethoden/-variablen zuzugreifen:
1. Erstellen Sie ein Objekt $object = new Class() und rufen Sie dann mit „->“ auf: > Attribut/Funktion, sofern auf die Variable/Methode zugegriffen werden kann.
2. Klassenmethoden/-variablen direkt aufrufen: class::attribute/function, unabhängig davon, ob sie statisch oder nicht statisch sind. Es gibt jedoch Voraussetzungen:
A. Wenn es sich um eine Variable handelt, muss auf die Variable zugegriffen werden können.
B. Wenn es sich um eine Methode handelt, muss sie zusätzlich zur Zugänglichkeit Folgendes erfüllen:
b1) Wenn es sich um eine statische Methode handelt, gibt es keine besonderen Bedingungen; Da es sich um eine nicht statische Methode handelt, muss sie geändert werden, wenn sie nicht in der Methode $ verwendet wird. Dies bedeutet, dass nicht statische Variablen/Methoden nicht aufgerufen werden.

Dann schauen wir uns den Unterschied zwischen der Verwendung von $object->… und der Verwendung von class::… an:
1 Bei der Verwendung von $object->… müssen Sie den Konstruktor ausführen Erstellen Sie das Objekt.
2. Verwenden Sie class::..., um statische Methoden/Variablen aufzurufen, ohne den Konstruktor auszuführen.
3. Variablen, und es ist nicht erforderlich, den Konstruktor auszuführen, um Objekte zu erstellen.

Dann kommt das Seltsame ans Licht: Da 2 und 3 gleich sind, welchen Sinn haben statische Methoden/Variablen?
Die Unterschiede bestehen offensichtlich wie folgt:
1. Statische Variablen
Statische Mitglieder behalten nur einen Variablenwert und dieser Variablenwert ist für alle Instanzen gültig, das heißt, alle Instanzen teilen sich dieses Mitglied.
2. Statische Methoden
Statische Methoden können direkt mit class::... aufgerufen werden, während nicht statische Methoden bestimmte Einschränkungen erfüllen müssen, bevor sie mit class::..-Methoden aufgerufen werden können, wie bereits erwähnt

Das obige ist der detaillierte Inhalt vonDie Verwendung und der Unterschied zwischen statischen Klassen und statischen Variablen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn