Static variables only exist within the function scope, that is to say, static variables only live on the stack. Generally, variables within functions will be released after the function ends, such as local variables, but static variables will not. That is to say, the value of the variable will be retained the next time this function is called.
As long as you add the keyword static before a variable, the variable becomes a static variable.
<?php function test() { static $nm = 1; $nm = $nm * 2; print $nm."<br />"; } // 第一次执行,$nm = 2 test(); // 第一次执行,$nm = 4 test(); // 第一次执行,$nm = 8 test(); ?>
Program execution result:
2 4 8
After the function test() is executed, the value of the variable $nm is saved.
Static attributes are often used in classes, such as static members and static methods.
Static variable $nm belongs to class bkjia, not to an instance of the class. This variable is valid for all instances.
:: is the scope qualification operator. The self scope is used here instead of the $this scope. The $this scope only represents the current instance of the class, and self:: represents the class itself.
<?php class bkjia { public static $nm = 1; function nmMethod() { self::$nm += 2; echo self::$nm . '<br />'; } } $nmInstance1 = new bkjia(); $nmInstance1 -> nmMethod(); $nmInstance2 = new bkjia(); $nmInstance2 -> nmMethod(); ?>
Program execution result:
3 5
<?php class NowaMagic { public static $nm = 'www.bkjia.com'; public function nmMethod() { return self::$nm; } } class Article extends NowaMagic { public function articleMethod() { return parent::$nm; } } // 通过作用于限定操作符访问静态变量 print NowaMagic::$nm . "<br />"; // 调用类的方法 $bkjia = new NowaMagic(); print $bkjia->nmMethod() . "<br />"; print Article::$nm . "<br />"; $nmArticle = new Article(); print $nmArticle->nmMethod() . "<br />"; ?>
Program execution result:
www.bkjia.com www.bkjia.com www.bkjia.com www.bkjia.com
PHP does not have a static constructor. You may need to initialize a static class. There is a very simple method. Call the Demonstration() method of the class directly after the class definition.
<?php function Demonstration() { return 'This is the result of demonstration()'; } class MyStaticClass { //public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error public static $MyStaticVar = null; public static function MyStaticInit() { //this is the static constructor //because in a function, everything is allowed, including initializing using other functions self::$MyStaticVar = Demonstration(); } } MyStaticClass::MyStaticInit(); //Call the static constructor echo MyStaticClass::$MyStaticVar; //This is the result of demonstration() ?>
Program execution result:
This is the result of demonstration()