ホームページ >バックエンド開発 >PHPチュートリアル >PHPの静的メソッドと非静的メソッドの使用法の違い
以下のエディターは、PHP の静的メソッドと非静的メソッドの使用法の違いを簡単に分析します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう
PHP プログラミングでは、static キーワード は、クラスの特定のインスタンスではなく、クラスに関連する 属性またはメソッドを宣言します。 したがって、このタイプの属性またはメソッドは、 「クラス属性」または「クラスメソッド」とも呼ばれます
アクセス制御権限が許可されている場合は、クラスオブジェクトを作成する必要はありませんが、クラス名と2つのコロン「::」を直接使用してそれを呼び出すことができます。
static キーワードは変数とメソッドを変更するために使用できます。 インスタンス化せずに、クラス内の静的属性と静的メソッドに直接アクセスできます。 static の 静的属性はメモリ内に 1 つのコピーのみを持ち、すべてのインスタンスによって共有されます。 現在のクラスの静的メンバーにアクセスするには、self:: キーワードを使用します。 クラスのすべてのインスタンスは、クラス内の静的プロパティを共有します。 つまり、メモリ内に複数のインスタンスがあっても、静的属性のコピーは 1 つだけ存在します。 例、カウンター $count 属性を設定し、プライベートおよび静的な変更を設定します。 このように、外部の世界は $count 属性に直接アクセスできません。プログラムの実行結果には、複数のインスタンスが同じ静的 $count 属性を使用していることも示されています。<?php class user { private static $count = 0 ; //记录所有用户的登录情况. public function construct() { self::$count = self::$count + 1; } public function getcount() { return self::$count; } public function destruct() { self::$count = self::$count - 1; } } $user1 = new user(); $user2 = new user(); $user3 = new user(); echo "now here have " . $user1->getcount() . " user"; echo "<br />"; unset($user3); echo "now here have " . $user1->getcount() . " user"; ?>
<?php class math { public static $pi = 3.14; } // 求一个半径3的园的面积。 $r = 3; echo "半径是 $r 的面积是<br />"; echo math::$pi * $r * $r; echo "<br /><br />"; //这里我觉得 3.14 不够精确,我把它设置的更精确。 math::$pi = 3.141592653589793; echo "半径是 $r 的面积是<br />"; echo math::$pi * $r * $r; ?>クラスは作成されず、静的プロパティを直接使用できます。静的プロパティはいつメモリ内に作成されますか? php には関連する情報がありませんでした。 Java の概念を引用して説明することも普遍的である必要があります。静的プロパティと静的メソッドは、クラスが呼び出されたときに作成されます。 3 つの静的メソッド 静的メソッドは、クラスをインスタンス化せずに直接使用できます。 使用されるメソッドはクラス名::静的メソッド名です引き続きこの数学クラスを作成して数学的計算を実行します。 最大値を計算する方法を設計します。数学的な演算なので、このクラスをインスタンス化する必要はなく、このメソッドを引き継いで使用できるとさらに便利です。 これは、静的メソッドを説明するためだけに設計されたクラスです。 PHP には、数値を比較するための max() 関数が用意されています。
<?php class math { public static function max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } } $a = 99; $b = 88; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo math::max($a, $b); echo "<br />"; echo "<br />"; echo "<br />"; $a = 99; $b = 100; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo math::max($a,$b); ?>静的メソッドが静的メソッドを呼び出す方法最初の例では、静的メソッドが他の静的メソッドを呼び出す場合、self:: を使用します
<?php // 实现最大值比较的math类。 class math { public static function max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function max3($num1, $num2, $num3) { $num1 = self::max($num1, $num2); $num2 = self::max($num2, $num3); $num1 = self::max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 88; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo math::max3($a, $b, $c); ?>静的メソッドは静的プロパティを呼び出しますself:: を使用して静的プロパティを呼び出しますこのクラス。
<?php // class circle { public static $pi = 3.14; public static function circleacreage($r) { return $r * $r * self::$pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r); ?>静的メソッドは非静的プロパティを呼び出すことはできません。 self:: を使用して非静的プロパティを呼び出すことはできません。
<?php // 这个方式是错误的 class circle { public $pi = 3.14; public static function circleacreage($r) { return $r * $r * self::pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r); ?>$this を使用して非静的プロパティの値を取得することもできません。 静的メソッドは非静的メソッドを呼び出します PHP5 では、静的メソッドで $this 識別子を使用して非静的メソッドを呼び出すことはできません。
<?php // 实现最大值比较的math类。 class math { public function max($num1, $num2) { echo "bad<br />"; return $num1 > $num2 ? $num1 : $num2; } public static function max3($num1, $num2, $num3) { $num1 = $this->max($num1, $num2); $num2 = $this->max($num2, $num3); $num1 = $this->max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 188; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo math::max3($a, $b, $c); //同样的这个会报错 ?>クラス内の非静的メソッドが self:: によって呼び出される場合、システムはこのメソッドを自動的に静的メソッドに変換します。
りー
以上がPHPの静的メソッドと非静的メソッドの使用法の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。