ホームページ  >  記事  >  バックエンド開発  >  PHPで静的変数を使用する方法の例のまとめ

PHPで静的変数を使用する方法の例のまとめ

伊谢尔伦
伊谢尔伦オリジナル
2017-06-30 10:08:011475ブラウズ

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";
?>

プログラムの実行結果:
1
2

今ここに3人のユーザーがいます
今ここに2人のユーザーがいます jb51.net
静的プロパティは直接呼び出されます

静的プロパティはインスタンス化せずに直接使用でき、クラスはまだ作成されていません作成されても直接使用できます。

使用するメソッドはクラス名::静的プロパティ名です。

<?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 ;
?>

プログラムの実行結果:
1
2
3
4

半径3の領域は
28.26
半径3の領域は
28.2743338823

クラスは作成されず、静的属性直接使用できます。静的プロパティはいつメモリ内に作成されますか? PHP には関連する情報がありません。 Java の概念を引用して説明することも普遍的である必要があります。

静的プロパティとメソッド。クラスが呼び出されたときに作成されます。クラスが呼び出されるときは、クラスが作成されるか、クラス内の静的メンバーが呼び出されることを意味します。
静的メソッド

静的メソッドは、クラスをインスタンス化せずに直接使用できます。

使用するメソッドはクラス名::静的メソッド名です。

数学的な計算を実行するために、この Math クラスの作成を続けましょう。最大値を計算する方法を設計します。これは数学的な演算であるため、このクラスをインスタンス化する必要はありません。このメソッドを使用できればさらに便利です。

このクラスは、静的メソッドを説明するためだけに設計されました。 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);
?>

プログラム実行結果:

$aと$bの最大値が
99であることを示す
$aと$bの最大値が
100であることを示す
静的メソッドによる静的メソッドの呼び出し方法

まずはたとえば、静的メソッドが他の静的メソッドを呼び出す場合は、クラス名を直接使用します。

<?php
// 实现最大值比较的Math类。
class Math{
    public static function Max($num1,$num2){
        return $num1 > $num2 ? $num1 : $num2;
    }
    public static function Max3($num1,$num2,$num3){
       $num1 = Math::Max($num1,$num2);
       $num2 = Math::Max($num2,$num3);
       $num1 = Math::Max($num1,$num2);       
       return $num1;
    }
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

プログラムの実行結果:
1
2

は、99 77 88 の最大値が
99

であることを示しています。 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);
?>

プログラム実行結果:
1
2

99 77 88の最大値が99であることを表示

静的メソッドは静的プロパティを呼び出します

この中で静的プロパティを呼び出すにはクラス名::静的プロパティ名を使用してくださいクラス 。

<?php
//
class Circle{
    public static $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * Circle::$pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

プログラム実行結果:
1

半径3の円の面積は28.26です

このクラスの静的プロパティを呼び出すには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);
?>

プログラム実行結果:
1

半径3の円の面積は28.26
静的メソッドは非静的プロパティを呼び出すことはできません

静的メソッドは非静的プロパティを呼び出すことはできません。 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);
?>

プログラムの実行結果:
1

致命的なエラー: E:PHPProjectstest.php の 7 行目で未定義のクラス定数 'pi' があります

$this を使用して非静的プロパティの値を取得することもできません。

<?php
//
class Circle{
    public $pi = 3.14;
    public static function circleAcreage($r){
      return $r * $r * $this->pi;
    }
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>

プログラム実行結果:
1

致命的エラー: E:PHPProjectstest.phpの7行目でobjectコンテキストにないときに$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);
?>

プログラムの実行結果:

99 77 188 の最大値が表示される
致命的なエラー: E:test.php の 10 行目でオブジェクト コンテキストにない場合に $this を使用する

非静的メソッドがクラスは self:: が呼び出されると、システムによってこのメソッドが自動的に静的メソッドに変換されます。

次のコードが実行され、結果が生成されました。 Max メソッドはシステムによって静的メソッドに変換されるためです。

<?php
// 实现最大值比较的Math类。
class Math{   
    public 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 = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

程序运行结果:
1
2

显示 99 77 188 中的最大值是
188

下面的例子中,我们让静态方法Max3 用过self::调用了非静态方法Max,有让非静态方法Max通过$this 调用非静态属性 $pi 。

在运行是报出了错误,这个错误和前一个例子 3-1-9.php一样,这次倒是非静态方法Max报出了静态方法调用非静态属性的错误。

这倒是证明了一点,在这里我们定义的非静态方法 Max 被系统自动转换成静态方法了。

<?php
// 实现最大值比较的Math类。
class Math{
    public $pi = 3.14;
    public function Max($num1,$num2){
        echo self::$pi;  //这里的调用看来不应该有问题.
        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 = 188;
echo "显示 $a  $b $c  中的最大值是";
echo "<br>";
echo Math::Max3($a,$b,$c);
?>

程序运行结果:
1
2

显示 99 77 188 中的最大值是
Fatal error: Access to undeclared static property: Math::$pi in E:PHPProjectstest.php on line 7

以上がPHPで静的変数を使用する方法の例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。