What are the functions of static variables in PHP

墨辰丷
Release: 2023-03-30 06:36:01
Original
9557 people have browsed it

This article mainly introduces the role of static variables in PHP. Interested friends can refer to it. I hope it will be helpful to everyone.

Recommended manual:php complete self-study manual

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 the keyword static is added before a variable, the variable becomes a static variable.

<?php
  function test()
  {
    static $nm = ;
    $nm = $nm * ;
    print $nm."<br />";
  }
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
?>
Copy after login

Program running results:

1
2
2
4
3
8
Copy after login

After the function test() is executed, the value of the variable $nm is saved.

Static properties are often used in classes, such as static members and static methods.

Recommended related articles:
1.When are php static variables destroyed
2.What are the differences between static variables and global variables in PHP?
Related video recommendations:
1.Dugu Jiujian(4)_PHP video tutorial

##Program List : Static members of the class

Static variable $nm belongs to class nowamagic, 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 nowamagic
  {
    public static $nm = ;
    function nmMethod()
    {
      self::$nm += ;
      echo self::$nm . &#39;<br />&#39;;
    }
  }
  $nmInstance = new nowamagic();
  $nmInstance -> nmMethod();
  $nmInstance = new nowamagic();
  $nmInstance -> nmMethod();
?>
Copy after login

Program running result:


1
3
2
5
Copy after login

Program List: Static attribute

<?php
  class NowaMagic
  {
    public static $nm = &#39;www.nowamagic.net&#39;;
    public function nmMethod()
    {
      return self::$nm;
    }
  }
  class Article extends NowaMagic
  {
    public function articleMethod()
    {
      return parent::$nm;
    }
  }
  // 通过作用于限定操作符访问静态变量
  print NowaMagic::$nm . "<br />";
  // 调用类的方法
  $nowamagic = new NowaMagic();
  print $nowamagic->nmMethod() . "<br />";
  print Article::$nm . "<br />";
  $nmArticle = new Article();
  print $nmArticle->nmMethod() . "<br />";
?>
Copy after login

Program running result:

www.nowamagic.net
www.nowamagic.net
www.nowamagic.net
www.nowamagic.net
Copy after login

Program List: Simple static constructor

PHP does not have a static constructor. You may need to initialize a static class. There is a very simple method. Call the Demonstration( of the class directly after the class definition). )method.

<?php
function Demonstration()
{
  return &#39;This is the result of demonstration()&#39;;
}
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()
?>
Copy after login

Program running results:

This is the result of demonstration()
Copy after login

The following is an introduction to the use of PHP static variables static

The static keyword is very common in C# programming , which is used as a modifier to declare static members that belong to the type itself rather than to a specific object. The static modifier can be used on classes, fields, methods, properties, operators, events, and constructors, but not on indexers, destructors, or types other than classes.

Classes, functions and variables declared as static will not be able to reference instance methods or variables. In addition, once a class is added with the static modifier in C#, all its internal variables and methods must be static. Static variables and methods must be referenced through class names and not through instance objects.

So what are the differences between the static keyword in PHP and C#?

Declaration scope

Compared with C#, the scope of use of static variables in PHP is wider. Not only can we add static modifiers in front of classes, methods or variables, we You can even add the static keyword to the internal variables of the function. The value of a variable with the static modifier added will not be lost even after the function is executed. That is to say, the variable will still remember the original value the next time the function is called. For example:

<?php
function test()
{
  static $var=;
  $var+=;
  echo $var.&#39; &#39;;
}
test();
test();
test();
?>
Copy after login

The running result is as follows:

3 5 7
Copy after login

One thing to note here is that the assignment operation of the variable will only be called when the variable is initialized for the first time. After that, the execution of the function During the process, this operation will not be called.

Since functions in PHP are also first-class citizens, unlike C#, we can directly define functions and call them directly anywhere in the code, which is somewhat similar to JavaScript. Therefore, at this time, function static variables are more useful than defining global variables, which can avoid conflicts caused by repeated definitions of variables.

Since the function in C# cannot be directly defined and called, it must be hosted in the class, so if the function requires static variables, we only need to define them in the class to achieve the same effect.

Calling method

In C#, the way we call static members is very simple and consistent, because static members do not belong to instance objects, so whether they are methods or variables, C# Access to its static members is always through class name.method (variable).

And in C#, static functions cannot be set as virtual methods or overridden. PHP provides more flexible and diverse support for this.

First of all, we know that calling instance methods in PHP is called through:

someobj->someFun(), so can we call static functions through SomeClass-> like C#? ;What about someFun() calls?

The answer is no. In PHP, calling static members can only be done through ::, such as: SomeClass::someFun().

<?php
class TestC
{
  public static $var=;
  public $var=;
  function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
    echo $this->var.&#39; &#39;;
  }
  public static function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
  }
}
$t=new TestC();
$t->t();
TestC::t();
?>
Copy after login
Copy after login

The running results are as follows:

3 1 5
Copy after login

另外一点和C#中不同的是,在类中的方法中,如果我们需要调用静态变量,必须通过self::$somVar静态变量(注意变量前面的$符号,实例变量不需要),而调用静态方法则为self::someFun()(这里不需要$符号)。如上例。

另外,与C#最大的不同之处就是,PHP中,子类是可以覆盖父类的静态函数或变量的,不仅如此,(站在C#程序员的角度来看,我觉得PHP这点反而将事情搞复杂了),由于默认self::staticFun()调用的是子类的静态函数,这个时候如果我们想调用父类的静态变量怎么办呢?

这里PHP提供了额外的parent来调用基类的静态成员。如:

<?php
class TestC
{
  public static $var=;
  public $var=;
  function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
    echo $this->var.&#39; &#39;;
  }
  public static function t()
  {
    self::$var+=;
    echo self::$var.&#39; &#39;;
  }
}
$t=new TestC();
$t->t();
TestC::t();
?>
Copy after login
Copy after login

运行结果如下:

3 5 ‘Hello&#39;
Copy after login

最好,根据上面的例子我们很容易想到,子类访问父类可以使用parent关键字,那么父类如何访问子类的静态方法呢?这里给出static的另外一个用法,这里如果将调用的静态方法前面的作用域换成static的话,PHP会根据该类的继承层次来计算最终的静态方法。如:

<?php
class Test
{
  function t()
  {
    static::t();
  }
  public static function t()
  {
    echo self::&#39;Test &#39;;
  }
}
class Test extends Test
{
  static function t()
  {
    echo self::&#39;Test &#39;;
  }
}
$t=new Test();
$t->t();
Test::t();
?>
Copy after login

运行结果如下:

Test2 Test2
Copy after login

这里t实例在t1方法调用t2静态方法时,会根据其实例找到最终的静态方法并输出Test2。

相关推荐:

PHP中数组处理函数的功能

PHP获取目录下文件

PHP中each及list函数的使用技巧

The above is the detailed content of What are the functions of static variables in PHP. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!