クラスの静的メンバーは一般的なクラス メンバーとは異なります。静的メンバーはオブジェクトのインスタンスとは何の関係も持たず、クラス自体とのみ関係します。静的メンバーは、クラスがカプセル化する関数とデータを実装するために使用されますが、静的メソッドや静的プロパティなどの特定のオブジェクトの関数とデータは含まれません。
静的プロパティには、クラス内にカプセル化され、クラスのすべてのインスタンスで共有できるデータが含まれます。実際、固定クラスに属し、アクセス方法が制限されていることに加えて、クラスの静的プロパティは関数のグローバル変数と非常によく似ています。
次の例では、静的プロパティ Counter::$count を使用します。これは Counter クラスに属しており、Counter のインスタンスには属しません。これを使用して参照することはできませんが、self または他の有効な命名式を使用できます。この例では、getCount メソッドは Counter::$count ではなく self::$count を返します。
静的メソッドは、クラスによってカプセル化される必要がある関数を実装しますが、特定のオブジェクトとは関係がありません。静的メソッドは、クラスのプロパティに完全にアクセスすることも、オブジェクトのインスタンスによってアクセスすることもできます。アクセス修飾子の。
前の例では、getCount は -> で呼び出される通常のメソッドですが、このメソッドは使用されませんが、場合によっては、getCount がどのオブジェクトにも属さないこともあります。有効なオブジェクトがある場合は、静的メソッドを使用する必要があります。オブジェクトから呼び出した場合でも、PHP は静的メソッド内にこの変数を作成しません。
例 6.7 は、6.3 の getCount を静的メソッドに変更したものです。Static キーワードは、インスタンスが -> 演算子を使用して getCount を呼び出すことを妨げませんが、this-> を呼び出した場合、PHP はこの変数をメソッド内に作成しません。それは、何かがうまくいかないでしょう。
//6.3 の例は、セクション 4 - コンストラクターとデストラクターの例を参照しています (前の記事を参照)。2 つの例を比較することで、 //静的メソッドと通常のメソッドの違いをよく理解できます。
もちろん、static キーワードを使用する場合、メソッドはどのように呼び出されても常に静的になります。
クラスでは定数プロパティを定義することもできます。 public static を使用する必要はありません。定数プロパティは常にクラスのプロパティであり、クラスをインスタンス化するオブジェクトのプロパティではありません。
以下、引用内容です
リスト 6.7 静的メンバー
クラスカウンター
{
プライベート静的 $count = 0;
const バージョン = 2.0;
関数__construct()
{
self::$count ;
}
関数__destruct()
{
self::$count--;
}
静的関数 getCount()
{
自分自身を返す::$count;
}
};
//インスタンスを作成すると、__construct()が実行されます
$c = 新しいカウンター();
//出力1
print(Counter::getCount() . "n");
//クラスのバージョン属性を出力します
print("使用されたバージョン: " . Counter::VERSION . "n");
?>