static キーワードはプロパティとメソッドを変更するために使用され、これらのプロパティとメソッドは静的プロパティおよび静的メソッドと呼ばれます。
static キーワードは、属性またはメソッドがクラスの特定のインスタンスではなく、クラスに関連付けられていることを宣言します。したがって、このタイプの属性またはメソッドは「クラス属性」または「クラス メソッド」とも呼ばれます
。
アクセス制御権限が許可されている場合は、このクラスのオブジェクトを作成せずに、クラス名と 2 つのコロン「::」を使用して直接呼び出すことができます。
static キーワードは、変数とメソッドを変更するために使用できます。
インスタンス化せずに、クラス内の静的プロパティと静的メソッドに直接アクセスできます。
静的プロパティとメソッドは静的プロパティとメソッドにのみアクセスでき、非静的プロパティとメソッドにはクラスからアクセスできません。静的プロパティとメソッドが作成されるとき、
と呼び出すことができるこのクラスのインスタンスが存在しない可能性があるためです。
使用。
静的プロパティのコピーはメモリ内に 1 つだけあり、すべてのインスタンスで共有されます。
現在のクラスの静的メンバーにアクセスするには、self:: キーワードを使用します。
クラスのすべてのインスタンスは、クラス内の静的プロパティを共有します。
つまり、メモリ内に複数のインスタンスが存在する場合でも、静的属性のコピーは 1 つだけ存在します。
次の例では、カウンター $count プロパティが設定され、プライベートおよび静的な変更が行われます。
このようにして、外部の世界は $count プロパティに直接アクセスできなくなります。プログラムを実行した結果、複数のインスタンスが同じ静的 $count 属性を使用していることもわかります。
クラスユーザー
{
Private static $count = 0; //すべてのユーザーのログイン状態を記録します。
パブリック関数 __construct() {
self::$count = self::$count + 1;
}
パブリック関数 getCount() {
return self::$count;
}
パブリック関数 __destruct() {
self::$count = self::$count - 1;
}
}
$user1 = 新しいユーザー();
$user2 = 新しいユーザー();
$user3 = 新しいユーザー();
echo "今ここに " . $user1->getCount() ";
エコー "
";
unset($user3);
echo "今ここに " . $user1->getCount() ";
?>
静的属性は直接呼び出されます
静的プロパティはインスタンス化せずに直接使用でき、クラスが作成される前に直接使用できます。
使用されるメソッドは次のとおりです: クラス名::静的プロパティ名
クラス数学
{
パブリック静的 $pi = 3.14;
}
// 半径 3 の庭の面積を求めます。
$r = 3;
echo "半径 $r の面積は
";
エコー Math::$pi * $r * $r;
echo "
";
//ここでは 3.14 は十分に正確ではないと思うので、より正確になるように設定しました。
数学::$pi = 3.141592653589793;
echo "半径 $r の面積は
";
エコー Math::$pi * $r * $r;
?>
クラスは作成されず、静的プロパティを直接使用できます。静的プロパティはいつメモリ内に作成されますか? PHP には関連する情報がありません。 Java の概念を引用して説明することも普遍的である必要があります
。静的プロパティと静的メソッドは、クラスが呼び出されたときに作成されます。
静的メソッド
静的メソッドは、クラスをインスタンス化せずに直接使用できます。
使用するメソッドはクラス名::静的メソッド名
です。
次に、数学的計算を実行するためにこの Math クラスの作成を続けます。最大値を計算する方法を設計します。これは数学的な演算であるため、このメソッド
の場合、このクラスをインスタンス化する必要はありません。
手に取って使用するだけの方がはるかに便利です。このクラスは、静的メソッドを説明するためだけに設計されました。 PHP には、数値を比較するための max() 関数が用意されています。
plaincopy をクリップボードに表示しますか?
クラス数学
{
パブリック静的関数 Max($num1, $num2) {
$num1 > $num1 : $num2;
}
$a = 99;
$b = 88;
echo "$a と $b の間の最大値を表示します";
エコー "
";
echo Math::Max($a, $b);
エコー "
";
エコー "
";
エコー "
";
$a = 99;
$b = 100;
echo "$a と $b の間の最大値を表示します";
エコー "
";
echo Math::Max($a,$b);
?>
静的メソッドの呼び出し方法
最初の例では、静的メソッドが他の静的メソッドを呼び出すときに、self::
を使用します。
//最大値比較を実装する数学クラス。
クラス数学
{
パブリック静的関数 Max($num1, $num2) {
$num1 > $num1 : $num2;
}
パブリック静的関数 Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
$num1 を返す;
}
}
$a = 99;
$b = 77;
$c = 88;
echo "$a $b $c の最大値を表示";
エコー "
";
echo Math::Max3($a, $b, $c);
?>
静的メソッドは静的プロパティを呼び出します
このクラスの静的プロパティを呼び出すには、self:: を使用します。
//
クラスサークル
{
パブリック静的 $pi = 3.14;
パブリック静的関数 CircleAcreage($r) {
return $r * $r * self::$pi;
}
}
$r = 3;
echo "半径 $r の円の面積は " です。 Circle::circleAcreage($r);
?>
静的メソッドは非静的プロパティを呼び出すことができません。 self:: を使用して非静的プロパティを呼び出すことはできません。
// この方法は間違っています
クラスサークル
{
パブリック $pi = 3.14
パブリック静的関数 CircleAcreage($r) {
return $r * $r * self::pi;}
}
$r = 3;
echo "半径 $r の円の面積は " です。 Circle::circleAcreage($r);
?>
また、$this を使用して非静的プロパティの値を取得することもできません。
静的メソッドは非静的メソッドを呼び出します
PHP5 では、静的メソッドで $this 識別子を使用して非静的メソッドを呼び出すことはできません。
//最大値比較を実装する数学クラス。
クラス数学
{
パブリック関数 Max($num1, $num2) {
echo "悪い
";
$num1 > $num1 : $num2;
}
パブリック静的関数 Max3($num1, $num2, $num3) {
$num1 = $this->Max($num1, $num2);
$num2 = $this->Max($num2, $num3);
$num1 = $this->Max($num1, $num2);
$num1 を返す;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "$a $b $c の最大値を表示";
エコー "
";
echo Math::Max3($a, $b, $c); //同じエラーが報告されます
?>
クラス内の非静的メソッドが self:: によって呼び出される場合、システムはこのメソッドを自動的に静的メソッドに変換します。
//最大値比較を実装する数学クラス。
クラス数学
{
パブリック関数 Max($num1, $num2) {
$num1 > $num1 : $num2;
}
パブリック静的関数 Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
$num1 を返す;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "$a $b $c の最大値を表示";
エコー "
";
echo Math::Max3($a, $b, $c);
?>
PHP100 フォーラム http://bbs.php100.com より