PHPの静的メソッドと非静的メソッドの使用法の違い

怪我咯
リリース: 2023-03-12 17:50:02
オリジナル
2380 人が閲覧しました

以下のエディターは、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";  
?>
ログイン後にコピー


2 番目に、静的属性は直接呼び出されます

静的属性はインスタンス化せずに直接使用でき、クラスが作成される前に直接使用できます。

使用方法:

クラス名::静的プロパティ名

<?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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!