PHP 中的静态变量

Subodh Poudel 2023年1月30日 2022年7月12日
  1. PHP 中的静态变量
  2. 在 PHP 中使用 self 关键字访问类中的静态变量
  3. PHP 中使用类名访问类外的静态变量
  4. 访问静态方法中的静态变量
PHP 中的静态变量

本文将介绍 PHP 静态变量,解释它们的特性,并演示在面向对象的上下文中访问静态变量的各种方法。

PHP 中的静态变量

程序中的变量用于存储以后可以在程序中使用的数据或值。变量可以存储字符、数值、字符串、内存地址等。

在 PHP 中,我们使用 $ 美元符号后跟变量名称来声明或存储值。

例子:

$name = "John Doe";
$marks = 90;

同样,静态变量是其范围不结束于函数之外的变量。非静态变量的作用域在函数退出后被销毁。

我们可以使用 static 关键字声明一个静态变量。

例子:

static $name = "John Doe";
static $marks = 90;`

让我们通过下面的演示来看看静态变量的属性。

代码示例:

function total_marks () {
    static $marks = 90;
    $marks ++;
    print $marks;
    print "<br />";
}
total_marks();
total_marks();
total_marks();

输出:

91
92
93

上面的代码显示静态变量即使在函数结束后仍保留其值。对函数 total_marks() 有三种不同的调用,但即使在函数退出后 $marks 的值也不会被破坏。

在进行第二次和第三次函数调用时,该值不会重置为 90。随着先前的值被保留,它会继续增加。

让我们将上面的示例应用于非静态变量。

示例代码:

function total_marks () {
    $marks = 90;
    $marks ++;
    print $marks;
    print "<br />";
}
total_marks();
total_marks();
total_marks();

输出:

91
91
91

每次进行函数调用时,$marks 变量的值都会重置为 90。它表明非静态变量不保留其先前的值。

在 PHP 中使用 self 关键字访问类中的静态变量

我们可以使用 self 关键字来访问类中的静态变量。双冒号 :: 用在 self 关键字之后,静态变量紧随其后。

this 关键字不适用于静态变量,因为静态变量不属于对象。

例如,在一个类中,Student 创建一个静态变量 $name 并分配一个值 John Doe。在函数内部,who() 使用带有双冒号的 self 关键字来访问静态变量 $name,最后,使用类的对象调用该函数。

示例代码:

class Student {
    public static $name = "John Doe";
    public function who() {
    echo self::$name;
    }
}
$obj = new Student;
$obj->who();

输出:

John Doe

PHP 中使用类名访问类外的静态变量

可以直接访问静态变量,而无需创建类的实例。要访问类外部的静态变量,我们可以编写类的名称,后跟双冒号(::),后跟静态变量的名称。

例如,在一个类中,Student 像第一个方法一样创建一个静态变量。接下来,在类外写入 Student:$name 以访问静态变量。

示例代码:

class Student {
    public static $name = "John Doe";
}
echo Student::$name;

输出:

John Doe

静态变量 $name 在类外部使用类名访问。

访问静态方法中的静态变量

在第一个示例中,我们了解了如何访问类中的静态变量。在那里,我们访问了非静态方法内部的静态变量。

本节将把静态变量放在静态方法中并对其进行访问。我们可以在函数前写 static 关键字来创建静态方法,在不创建类实例的情况下访问静态函数,并使用类名调用静态方法。

示例代码:

class Student {
    public static $name = "John Doe";
    public static function who() {
    echo self::$name;
    }
}
Student::who();

输出:

John Doe

在这里,我们使用::运算符访问了类 Student 的静态方法 who()。我们使用 self 关键字来访问方法内的静态变量。

Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn