PHP:关于静态的行为

首先

这篇文章是为了给编程初学者的备忘录而写的,希望能对其他初学者有所帮助。

这次在学习PHP的过程中,我对于static这个概念产生了一些疑问,所以进行了一番调查研究。如果有任何错误,请您指正。非常感谢。

static 的使用方法

通过声明 static ,属性或方法将属于类,并且可以在没有实例化的情况下使用。

换言之,你可以执行与实例状态无关的操作。这被称为实用方法,并用于执行明确约定的处理等。

请注意,在静态方法中无法使用$this。

如果给属性加上static的话。

固定配置于属性所属的类中。

当一个属性的归属类被固定时,这意味着可以从任何地方访问该属性,并且该属性存在于实例之间作为共享属性。

我想创建一个样本并确认其行为。


<?php 
class StaticNum
{
    //staticプロパティ
    public static $stNum = 0;  
    //通常のプロパティ
        public $num = 0;  

    //プロパティに引数の値を加算するメソッド
    public function count(int $plus)
{
        //staticプロパティに加算     
     self::$stNum += $plus;  
        //通常プロパティに加算
        $this->num += $plus;  
}
}

//StaticNumbersインスタンスを2つ作成
$staticA = new StaticNum(); 
$staticB = new StaticNum(); 

//Aのcount()を引数5で実行
$staticA->count(5);  
//Aのプロパティを出力
echo "AのstNum:" . $staticA::$stNum. "num:" . $staticA->num;

//Bのcount()を引数10で実行
$staticB->count(10); 
 //Bのプロパティを出力
echo "BのstNum: " . $staticB::$stNum . "num:" . $staticB->num;  

//実行結果
AのstNum: 5 num: 5
BのstNum: 15 num: 10

根据上述结果可以看出,如果按照正常逻辑创建实例并执行,分别给两个属性加上5和10,staticA属性应该有5的值,staticB属性应该有10的值。然而,通过使用public static $stNum = 0;这样的static关键字将其设置为静态属性,属性将属于类并且独立于实例拥有自己的值。

最终结果是,从实例角度看,属于类的属性($stNum)只有一个,所以只有$stNum是可加的,先加5后再加10,$stNum将持有值15。

我对它的使用场景一点也不清楚。

就静态方法而言,与普通方法相比,使用方式几乎没有太大区别…

我个人认为,通过将断言方法声明为静态,可以使测试对象在超出范围外进行重复使用。

如果您有关于如何正确使用static的知识或建议,如果方便的话,希望能在评论中给予教导。

请多多关照。

文献引用

PHP手册静态关键字是用来做什么的?