PHP static 静态变量和属性方法使用说明
变量与其它变量明确区别的,下面我来给各位介绍 static 静态变量和属性方法及静态变量的引用与静态函数的用法,各位有需要了解的同学可参考.
静态变量:变量范围的另一个重要特性是静态变量(static variable),静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失,看看下面的例子.
例子 7-4.演示需要静态变量的例子,代码如下:
<?php function Test() { $a = 0; echo $a; $a++; } ?>
本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0",将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了,要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的.
例子 7-5. 使用静态变量的例子,代码如下:
<?php function Test() { static $a = 0; echo $a; $a++; } ?>
现在,每次调用 Test() 函数都会输出 $a 的值并加一.
静态变量也提供了一种处理递归函数的方法,递归函数是一种调用自己的函数,写递归函数时要小心,因为可能会无穷递归下去,必须确保有充分的方法来中止递归,一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止.
例子 7-6,静态变量与递归函数,代码如下:
<?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test(); } $count--; } ?>
注:静态变量可以按照上面的例子声明,如果在声明中用表达式的结果对其赋值会导致解析错误.
例子 7-7.声明静态变量,代码如下:
<?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; } ?>
全局和静态变量的引用
在 Zend 引擎 1 代,驱动了 PHP4,对于变量的 static 和 global 定义是以 references 的方式实现的,例如,在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用,这有可能导致预料之外的行为,如以下例子所演示的,代码如下:
<?php function test_global_ref() { global $obj; $obj = & new stdclass; } function test_global_noref() { global $obj; $obj = new stdclass; } test_global_ref(); var_dump($obj); test_global_noref(); var_dump($obj); ?>
执行以上例子会导致如下输出,代码如下:
NULL object(stdClass)(0) { }
类似的行为也适用于 static 语句,引用并不是静态地存储的,代码如下:
<?php function &get_instance_ref() { static $obj; echo "Static object: "; var_dump($obj); if (!isset($obj)) { // 将一个引用赋值给静态变量 $obj = & new stdclass; } $obj->property++; return $obj; } function &get_instance_noref() { static $obj; echo "Static object: "; var_dump($obj); if (!isset($obj)) { // 将一个对象赋值给静态变量 $obj = new stdclass; } $obj->property++; return $obj; } $obj1 = get_instance_ref(); $still_obj1 = get_instance_ref(); echo "n"; $obj2 = get_instance_noref(); $still_obj2 = get_instance_noref(); ?>
执行以上例子会导致如下输出:
Static object: NULL Static object: NULL Static object: NULL Static object: object(stdClass)(1) { ["property"]=> int(1) }
上例演示了当把一个引用赋值给一个静态变量时,第二次调用 &get_instance_ref() 函数时其值并没有被记住.
注:
1.函数外部声明静态变量意义不大,函数内部声明静态变量受限于作用域,函数外部不能修改函数内部静态变量.
2.引用变量,也是变量,只不过它的值是变量的内存地址.
php保留字 global和static,代码如下:
<?php $i = $j = 8; function global_var() { global $j, $b; $c = $j = $b = $i = 4; } global_var(); echo "i:$i, j:$j b:$b c:$c n"; //i:8, j:4 b:4 c: ?>
函数外和内都有变量$i,但是他们二个是完全不同的变量,函数外的$i是全局变量,该内存空间直到脚本运行结束后才会被释放,函数内的$i是局部变量,程序流经过函数的时候,初始化,退出函数的时候,内存被系统回收,再次调用函数,则再次分配内存空间和回收内存空间,二次分配的内存空间有可能是同一内存地址,也有可能不能同一内存地址.
与$i不同的是$j,通过关键字global将局部变量"转为"全局变量,当调用函数global_var()的时候,并不会重新给$j分配内存空间,同样的,可以在函数外打印$b,却不能打印$c是因为$b是全局变量,不会被销毁,而$c则不能打印,$c已经不存在了,在退出函数就给销毁了,代码如下:
<?php $a = 2; static $b = 2; static $c = 3; function global_var() { static $i, $c; global $j, $a; $c = $a = $b = $i = $j = 4; } global_var(); echo "a:$a b:$b c:$c i:$i j:$j"; //a:4 b:2 c:3 i: j:4 ?>
首先,我们看函数外的$b和$c,即是全局变量又是static变量,这里static修饰没有太大的意义,因为他们都存放在数据段(data-segment),直到脚本运行完了之后才会被回收,然后,我们再看函数里面的$i和$c,函数调用后,$i和$c其实都没有被回收,但是$i输出是NULL和$c输出是3,这是因为他们的作用域是函数内部,不是函数外部,也就是说$i和$c在函数外是不可见的,函数内static变量的意义就在于此,仅函数内部可见且不会被销毁,也就是说,保证函退出函数,变量也不会被回收,但又不会被其它函数修改.(注:函数外和函数内的$c是二个不同的变量)
代码如下:
<?php function global_var() { static $i; ++$j; ++$i; echo "j:$j i:$i n"; } global_var(); //j:1 i:1 global_var(); //j:1 i:2 global_var(); //j:1 i:3 ?>
上例中,变量$j一直都是1,而$i每调用一次就累加1,这是因为,局部变量存放在堆段,每次退出函数时都会被回收,而$i存放在存放在数据段(data-segment),直到程序执行完毕才会被回收,我们平常说的static变量,如果没有特别指明,都说的是函数内部的static变量.
引用函数与static变量
既然static变量要直到脚本执行结束,才会被销毁,那么,有没有办法访问该变量的值呢?我们来看看下面的示例,代码如下:
<?php get_local_static_var(); $ptr = & get_local_static_var(); get_local_static_var(); ++$ptr; get_local_static_var(); what_i($ptr); get_local_static_var(); //?? what_p($ptr); get_local_static_var(); //?? function &get_local_static_var() { static $i; ++$i; echo "i:$i n"; return $i; } function what_i($ptr) { $i = & get_local_static_var(); ++$i; ++$ptr; } function what_p(&$ptr) { $i = & get_local_static_var(); ++$i; ++$ptr; } ?>
二个凝问号处,分别输出是8和12,这就说明了只要变量没有被销毁,还是可以被访问,我们可以通过引用函数将static变量的地址返回其它函数,其它函数则可通过static变量的地址访问并且修改它的值.
上例第一处??,为什么是8,而不是9,这是因为what_i($ptr)函数,要求参数是按值传递,即此处的$ptr实参值是5,且参数$ptr和全局变量$ptr是二个不同的变量。第二处??的值是12,为什么不是11的道理亦是如此。what_p(&$ptr)函数,要求参数是按引用传递,即此处的$ptr是指向static变量$i的地址,需要注意的是参数$ptr和全局变量$ptr也是二个不同的变量,只不过他们都指向同一个地方.
教程链接:
随意转载~但请保留教程地址★

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der statische Variablenmechanismus von PHP-Funktionen ermöglicht es Variablen, ihre Werte zwischen Funktionsaufrufen beizubehalten, wodurch die folgende Funktionalität erreicht wird: Statuserhaltung zwischen Funktionsaufrufen. Vermeiden Sie die Erstellung doppelter Variablen. Vereinfachen Sie den Code.

Die Rolle und Verwendung von Statik in der C-Sprache: 1. Variablenbereich; Wenn das Schlüsselwort static vor einer Variablen steht, ist der Gültigkeitsbereich der Variablen auf die Datei beschränkt, in der sie deklariert ist. Mit anderen Worten, die Variable ist ein „Gültigkeitsbereich auf Dateiebene“, was sehr nützlich ist, um das „ zu verhindern. Problem der doppelten Definition von Variablen; 2. Lebenszyklus, statische Variablen werden einmal initialisiert, wenn die Ausführung des Programms beginnt, und zerstört, wenn das Programm endet usw.

1. static Bitte schauen Sie sich zuerst das folgende Programm an: publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} Habe das gesehen Segmentprogramme sind den meisten Leuten bekannt, die Java studiert haben. Auch wenn Sie kein Java, aber andere Hochsprachen wie C gelernt haben, sollten Sie die Bedeutung dieses Codes verstehen können. Es gibt lediglich „Hallo Welt“ aus und hat keine andere Verwendung. Es zeigt jedoch den Hauptzweck des statischen Schlüsselworts.

Praktische Anwendungsszenarien und Verwendungsfähigkeiten des Schlüsselworts static in der C-Sprache 1. Übersicht static ist ein Schlüsselwort in der C-Sprache, das zum Ändern von Variablen und Funktionen verwendet wird. Seine Funktion besteht darin, seinen Lebenszyklus und seine Sichtbarkeit während der Programmausführung zu ändern und Variablen und Funktionen statisch zu machen. In diesem Artikel werden die tatsächlichen Anwendungsszenarien und Verwendungstechniken des statischen Schlüsselworts vorgestellt und anhand spezifischer Codebeispiele veranschaulicht. 2. Statische Variablen verlängern den Lebenszyklus von Variablen. Die Verwendung des Schlüsselworts static zum Ändern lokaler Variablen kann deren Lebenszyklus verlängern.

Die Funktionen von Static: 1. Methoden; 3. Andere Verwendungen; Optimierung des Speicherlayouts; 11. Vermeiden Sie wiederholte Initialisierung. 12. Verwendung in Funktionen. Detaillierte Einführung: 1. Variablen, statische Variablen. Wenn eine Variable als statisch deklariert wird, gehört sie zur Klassenebene und nicht zur Instanzebene. Dies bedeutet, dass unabhängig von der Anzahl der erstellten Objekte nur eine statische Variable und alle Objekte vorhanden sind Teilen Sie diese statischen Variablen usw.

Modifikator abstract (abstract) 1. Abstract kann eine Klasse ändern (1) Die durch abstract geänderte Klasse wird als abstrakte Klasse bezeichnet (2) Syntax: abstractclass-Klassenname {} (3) Funktionen: Abstrakte Klassen können keine Objekte separat erstellen, sie können jedoch (4) Abstrakte Klassen können Mitgliedsvariablen und Mitgliedsmethoden definieren. Wenn sie zum Erstellen von Unterklassenobjekten verwendet werden, erstellt jvm standardmäßig ein übergeordnetes Klassenobjekt apply Wird angewendet, wenn JVM ein übergeordnetes Klassenobjekt erstellt. 2. Abstrakt kann Methoden ändern (1) Die durch asbtract geänderte Methode wird als abstrakte Methode bezeichnet (2) Syntax: Zugriffsmodifikator abstrakter Rückgabewert

Das „statische“ in den statischen PHP-Methoden bedeutet, dass diese Eigenschaften und Methoden direkt aufgerufen werden können, ohne die Klasse zu instanziieren. „static“ ist ein Schlüsselwort, das zum Ändern der Eigenschaften und Methoden der Klasse verwendet wird, und seine Verwendungssyntax lautet beispielsweise „class Foo { public static $my_static = 'hello';}".

Springboot liest die Pro-Datei und fügt statische statische Variablen ein mailConfig.properties#Server mail.host=smtp.qq.com#Portnummer mail.port=587#E-Mail-Konto mail.userName=hzy_daybreak_lc@foxmail.com#E-Mail-Autorisierungscode-Mail. passWord =vxbkycyjkceocbdc#Zeitverzögerung mail.timeout=25000#Sender mail.emailForm=hzy_daybreak_lc@foxmail.com#Sender mai
