PHP 静态方法和静态属性


在本教程中,我们将学习PHP静态方法和静态属性。同时将介绍$this和self之间的区别,并讨论何时可以使用静态方法。

PHP静态方法和静态属性介绍

有时候,我们想在类的上下文中而不是在对象中访问方法和属性,那么就可以使用static关键字。

要将静态方法添加到类中,可以使用static关键字,如下所示:

1
2
3
public static function static_method(){
// 方法的实现
}

在方法的可见性之前或之后放置static关键字都可以。但是,按照惯例,首先声明可见性(public,private,protected)。

要将静态属性添加到类中,您还可以使用static关键字:

1
private static $static_property;

静态方法和静态属性没有链接到类的任何特定对象,而是链接到类本身。

要在类外部调用静态方法,可以使用::操作符,如下所示:

1
MyClass::static_method();

要在类外部访问公共的静态属性,也是使用::操作符:

1
MyClass::$static_property;

但是,要从类的实例内部访问静态方法和静态属性,需要使用self而不是$this,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class MyClass{
private static $static_property;
 
public static function static_method(){
//...
}
 
public function method(){
self::$static_property;
self::static_method();
}
}

self 和 $this 的对比

新的PHP面向对象编程开发人员可能有时会混淆self和$this。这里让我们做一个比较:

$this self
表示类的一个实例或者对象 表示一个类
永远以符号$开头 从不以$符号开头
后面是->操作符 后面是::操作符
->操作符后面的属性名不带$符号,
例如$this->property
::操作符后面的属性名总是带有$符号。
例如self::$property

PHP静态方法和静态属性示例

下面的例子演示了如何使用静态方法和静态属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

</td>

<?php
class Counter {
private $count;
public static $instance;
public function __construct($count = 0) {
$this->count = $count;
self::$instance++;
}
public function count() {
$this->count++;
return $this;
}
public function __toString() {
return (string) $this->count;
}
public static function countInstance() {
return self::$instance;
}
}
$c1 = new Counter();
$c1->count()
->count();
echo '计数器1的值: ' . $c1 . '<br/>';
$c2 = new Counter();
$c2->count()
->count()
->count();
echo '计数器2的值: ' . $c2 . '<br/>';
echo '计数器的数量:'
. Counter::countInstance()
. '<br/>';

什么时候使用静态方法?

在定义静态方法之前,问自己一个问题:“在不实例化新对象的情况下直接调用方法是否有意义?””。
如果某个逻辑可以由类的多个实例共享,则可以提取相应的代码并将其放入静态方法中。

PHP静态方法通常用于PHP框架中的utility类。utility类是只包含静态方法的类。


原文链接:https://codingdict.com/