Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung von Beispielen für die Verwendung statischer Variablen in PHP

Zusammenfassung von Beispielen für die Verwendung statischer Variablen in PHP

伊谢尔伦
伊谢尔伦Original
2017-06-30 10:08:011521Durchsuche

Das

statische Schlüsselwort deklariert ein -Attribut oder eine Methode, die sich auf die Klasse und nicht auf eine bestimmte Instanz der Klasse bezieht Solche Eigenschaften oder Methoden werden auch „Klasseneigenschaften“ oder „Klassenmethoden“ genannt.

Wenn die Berechtigung Zugriffskontrolle zulässig ist, können Sie sie direkt mit dem Klassennamen plus zwei Doppelpunkten „::“ aufrufen, ohne ein Objekt dieser Klasse zu erstellen.

Das Schlüsselwort static kann zum Ändern von Variablen und Methoden verwendet werden.

Sie können ohne Instanziierung direkt auf die statischen Attribute und statischen Methoden in der Klasse zugreifen.

Statische Eigenschaften und Methoden können nur auf statische Eigenschaften und Methoden zugreifen und nicht auf nicht-statische Eigenschaften und Methoden. Denn bei der Erstellung statischer Eigenschaften und Methoden kann es sein, dass noch keine Instanzen dieser Klasse vorhanden sind, die aufgerufen werden können.

Statische Attribute haben nur eine Kopie im Speicher und werden von allen Instanzen gemeinsam genutzt.

Verwenden Sie das Schlüsselwort self::, um auf statische Mitglieder der aktuellen Klasse zuzugreifen.
Öffentliche Eigenschaften statischer Eigenschaften

Alle Instanzen einer Klasse teilen die statischen Eigenschaften in der Klasse.

Mit anderen Worten: Selbst wenn mehrere Instanzen im Speicher vorhanden sind, gibt es nur eine Kopie der statischen Attribute.

Im folgenden Beispiel wird ein Zähler-$count-Attribut mit privaten und statischen Änderungen festgelegt. Auf diese Weise kann die Außenwelt nicht direkt auf die Eigenschaft $count zugreifen. Als Ergebnis der Programmausführung sehen wir auch, dass mehrere Instanzen dasselbe statische $count-Attribut verwenden.

<?php
class user{
    private static $count = 0 ; //记录所有用户的登录情况.
    public function construct(){
        self::$count = self::$count + 1;
    }
    public function getCount(){    
        return self::$count;
    }
    public function destruct(){
        self::$count = self::$count -1;
    }
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo "now here have ".$user1->getCount()." user";
echo "<br>";
unset( $user3);
echo "now here have ".$user1->getCount()." user";
?>

Ergebnis der Programmausführung:
1
2

jetzt hier 3 Benutzer
jetzt hier 2 Benutzer jb51.net
Statisches Attribut wird aufgerufen direkt

Statische Eigenschaften können direkt ohne Instanziierung und direkt vor der Klassenerstellung verwendet werden.

Die verwendete Methode ist Klassenname::statischer Eigenschaftsname.

<?php
class Math{
    public static $pi = 3.14;
}
//求一个半径3的园的面积。
$r = 3;
echo "半径是 $r 的面积是<br>";
echo Math::$pi * $r * $r ;
echo "<br><br>";
//这里我觉得 3.14 不够精确,我把它设置的更精确。
Math::$pi = 3.141592653589793;
echo "半径是 $r 的面积是<br>";
echo Math::$pi * $r * $r ;
?>

Ergebnis der Programmausführung:
1
2
3
4

Die Fläche mit Radius 3 ist
28,26
Der Radius ist Die Fläche von 3 ist
28,2743338823

Die Klasse wird nicht erstellt und die statischen Attribute können direkt verwendet werden. Wann werden statische Eigenschaften im Speicher erstellt? Ich habe keine relevanten Informationen in PHP gesehen. Das Zitieren von Konzepten in Java zur Erklärung sollte ebenfalls universell sein.

Statische Eigenschaften und Methoden, die beim Aufruf der Klasse erstellt werden. Wenn eine Klasse aufgerufen wird, bedeutet dies, dass die Klasse erstellt oder ein beliebiges statisches Mitglied in der Klasse aufgerufen wird.
Statische Methoden

Statische Methoden können direkt verwendet werden, ohne dass die Klasse instanziiert wird.

Die verwendete Methode ist Klassenname: statischer Methodenname.

Schreiben wir weiter diesen Mathematikkurs, um mathematische Berechnungen durchzuführen. Wir entwerfen eine Methode zur Berechnung des Maximalwerts. Da es sich um eine mathematische Operation handelt, müssen wir diese Klasse nicht instanziieren. Es wäre viel praktischer, wenn diese Methode übernommen und verwendet werden könnte.

Wir haben diese Klasse nur entworfen, um die statische Methode zu demonstrieren. PHP bietet die Funktion max() zum Vergleichen numerischer Werte.

<?php
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }    
}
$a = 99;
$b = 88;
echo "显示 $ a 和 $ b 中的最大值是";
echo "<br>";
echo Math::Max($a,$b);
echo "<br>";echo "<br>";echo "<br>";
$a = 99;
$b = 100;
echo "显示 $ a 和 $ b 中的最大值是";
echo "<br>";
echo Math::Max($a,$b);
?>

Ergebnisse der Programmausführung:

Zeigt an, dass der Maximalwert von $a und $b
99 ist.
Zeigt an, dass der Maximalwert von $a und $b beträgt
100
So rufen Sie statische Methoden aus statischen Methoden auf

Im ersten Beispiel wird der Klassenname direkt verwendet, wenn eine statische Methode andere statische Methoden aufruft.

<?php
// 实现最大值比较的Math类。
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = Math::Max($num1,$num2);
       $num2 = Math::Max($num2,$num3);
       $num1 = Math::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

Ergebnis der Programmausführung:
1
2

Der in 99 77 88 angezeigte Maximalwert ist
99

Sie können auch verwenden self :: Ruft andere statische Methoden in der aktuellen Klasse auf. (Vorschlag)

<?php
// 实现最大值比较的Math类。
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

Ergebnis der Programmausführung:
1
2

Der maximal angezeigte Wert unter 99 77 88 ist
99
Statische Methodenaufrufe statisch Das Attribut

verwendet den Klassennamen::statischen Eigenschaftsnamen, um die statischen Eigenschaften in dieser Klasse aufzurufen.

<?php
//
class Circle{
    public static $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * Circle::$pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

Ergebnis der Programmausführung:
1

Die Fläche eines Kreises mit Radius 3 beträgt 28,26

Verwenden Sie self::, um die statischen Eigenschaften aufzurufen dieser Klasse. (Vorschlag)

<?php
//
class Circle{
    public static $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * self::$pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

Ergebnis der Programmausführung:
1

Die Fläche eines Kreises mit Radius 3 beträgt 28,26
Statische Methoden können keine nichtstatischen Eigenschaften aufrufen

Statische Methoden können keine nicht statischen Eigenschaften aufrufen. Nicht statische Eigenschaften können nicht mit self:: aufgerufen werden.

<?php
//
class Circle{
    public $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * self::pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

Ergebnis der Programmausführung:
1

Schwerwiegender Fehler: Undefinierte Klassenkonstante „pi“ in E:PHPProjectstest.php in Zeile 7

kann auch nicht sein used $this ruft den Wert einer nicht statischen Eigenschaft ab.

<?php
//
class Circle{
    public $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * $this->pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

Ergebnis der Programmausführung:
1

Schwerwiegender Fehler: Verwendung von $this, wenn nicht im Objekt-Kontext in E:PHPProjectstest.php in Zeile 7
Statische Methoden rufen nicht-statische Methoden auf

In PHP5 kann der Bezeichner $this nicht in statischen Methoden zum Aufrufen nicht-statischer Methoden verwendet werden.

<?php
// 实现最大值比较的Math类。
class Math{   
    public function Max($num1,$num2){
        echo "bad<br>";       
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = $this->Max($num1,$num2);
       $num2 = $this->Max($num2,$num3);
       $num1 = $this->Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

Das Ergebnis der Programmausführung:

Zeigt an, dass der Maximalwert unter 99 77 188 ist
Schwerwiegender Fehler: Verwendung von $this, wenn nicht im Objektkontext in E:test.php in Zeile 10

Wenn eine nicht statische Methode in einer Klasse von self:: aufgerufen wird, konvertiert das System diese Methode automatisch in eine statische Methode.

Der folgende Code wurde ausgeführt und lieferte Ergebnisse. Weil die Max-Methode vom System in eine statische Methode umgewandelt wird.

<?php
// 实现最大值比较的Math类。
class Math{   
    public function Max($num1,$num2){      
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

程序运行结果:
1
2

显示 99 77 188 中的最大值是
188

下面的例子中,我们让静态方法Max3 用过self::调用了非静态方法Max,有让非静态方法Max通过$this 调用非静态属性 $pi 。

在运行是报出了错误,这个错误和前一个例子 3-1-9.php一样,这次倒是非静态方法Max报出了静态方法调用非静态属性的错误。

这倒是证明了一点,在这里我们定义的非静态方法 Max 被系统自动转换成静态方法了。

<?php
// 实现最大值比较的Math类。
class Math{
    public $pi = 3.14;
    public function Max($num1,$num2){
        echo self::$pi;  //这里的调用看来不应该有问题.
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = self::Max($num1,$num2);
       $num2 = self::Max($num2,$num3);
       $num1 = self::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

程序运行结果:
1
2

显示 99 77 188 中的最大值是
Fatal error: Access to undeclared static property: Math::$pi in E:PHPProjectstest.php on line 7

Das obige ist der detaillierte Inhalt vonZusammenfassung von Beispielen für die Verwendung 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