PHP 静态方法和静态属性
时间:2018-11-15 15:16:38 来源:igfitidea点击:
在本教程中,我们将学习PHP静态方法和静态属性。同时将介绍$this和self之间的区别,并讨论何时可以使用静态方法。
PHP静态方法和静态属性介绍
有时候,我们想在类的上下文中而不是在对象中访问方法和属性,那么就可以使用static关键字。
要将静态方法添加到类中,可以使用static关键字,如下所示:
public static function static_method(){ // 方法的实现 }
在方法的可见性之前或之后放置static关键字都可以。但是,按照惯例,首先声明可见性(public,private,protected)。
要将静态属性添加到类中,您还可以使用static关键字:
private static $static_property;
静态方法和静态属性没有链接到类的任何特定对象,而是链接到类本身。
要在类外部调用静态方法,可以使用::
操作符,如下所示:
MyClass::static_method();
要在类外部访问公共的静态属性,也是使用::
操作符:
MyClass::$static_property;
但是,要从类的实例内部访问静态方法和静态属性,需要使用self而不是$this,如下所示:
<?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静态方法和静态属性示例
下面的例子演示了如何使用静态方法和静态属性:
<?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类是只包含静态方法的类。