Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleichende Analyse von Anwendungsbeispielen statischer Klassen und statischer Variablen in PHP

Vergleichende Analyse von Anwendungsbeispielen statischer Klassen und statischer Variablen in PHP

伊谢尔伦
伊谢尔伦Original
2017-06-30 11:07:021345Durchsuche

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 muss auf die Variable zugegriffen werden können.

B. Wenn es sich um eine Methode handelt, muss sie zusätzlich zu den folgenden Anforderungen erfüllt sein: , es gibt 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 werden 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: :…, um statische Methoden/Variablen aufzurufen, ohne sie auszuführen der Konstruktor zum Erstellen von Objekten.

3. Verwenden Sie class::…, um nicht statische Methoden/Variablen aufzurufen, ohne den Konstruktor zum Erstellen von Objekten auszuführen.

Dann kommt das Seltsame heraus und 3 sind gleich. 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:

<?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();    // 输出:我是中国人 
?>
Ausführen des Beispiels , die Ausgabe lautet:

China
I I am Chinese
I am Chinese
China
I am Chinese

Zusammenfassung: Um auf statische Elementeigenschaften oder -methoden innerhalb einer Klasse zuzugreifen , verwenden Sie self:: (nicht $slef beachten). Der Code lautet wie folgt:

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

Statische Mitglieder mit externem Zugriff
parent:: $country
parent:: myCountry()
Attribute und Methoden

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

Aber auf statische Methoden kann auch über gewöhnliche Objekte zugegriffen werden
Person::$country
Person::myCountry()
Student::$country
Beispiele, Deklarationen Statische Variablen, der Code lautet wie folgt:


Beispiel, ein Beispiel für die Verwendung statischer Variablen, 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; 
   } 
?>

<?PHP 
   function Test() 
   { 
   static $w3sky = 0; 
   echo $w3sky; 
   $w3sky++; 
   } 
?>
Jetzt wird bei jedem Aufruf der Test()-Funktion $ ausgegeben. Der Wert von w3sky wird um eins erhöht


Statisch Variablen bieten auch eine Möglichkeit, mit

rekursiven Funktionen

umzugehen. Seien Sie beim Schreiben rekursiver Funktionen vorsichtig, da Sie sicherstellen müssen, dass eine ausreichende Methode vorhanden ist Um die Rekursion zu beenden, nehmen wir diese einfache Funktion, um rekursiv bis 10 zu zählen. Verwenden Sie die statische Variable $count, um zu bestimmen, wann gestoppt werden soll. Beispiel, statische Variablen und rekursive Funktionen, der Code lautet wie folgt:

Hinweis: Statische Variablen können gemäß dem obigen Beispiel deklariert werden. Wenn das Ergebnis des
<?PHP 
   function Test() 
   { 
   static $count = 0; 
    
   $count++; 
   echo $count; 
   if ($count < 10) { 
   Test(); 
   } 
   $count--; 
   } 
?>
-Ausdrucks

verwendet wird, um ihm in der Deklaration einen Wert zuzuweisen, führt dies zu einem Analysefehler .

Das obige ist der detaillierte Inhalt vonVergleichende Analyse von Anwendungsbeispielen statischer Klassen und statischer 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