PHPにおける静的クラスと静的変数の使用法と違い

怪我咯
リリース: 2023-03-13 11:14:01
オリジナル
1193 人が閲覧しました

この記事では主に、php での静的クラスと静的変数の使用法の違いを紹介します。php での静的クラスと静的変数の定義、機能、および使用スキルを例とともに詳しく分析します。必要な方はこの記事を参照してください。

この例では、PHP での静的クラスと静的変数の使用法の違いを分析します。皆さんの参考に共有してください。具体的な分析は次のとおりです。

static は、静的オブジェクトまたは静的変数を定義します。 static で定義された変数またはクラス メソッドの特性については、この記事の

1 を参照してください。 object$ object = new Class() を使用して、$object->attribute/function を呼び出します (変数/メソッドがアクセス可能である場合)

2 クラスのメソッド/変数を直接呼び出します。 : class::attribute/ 関数。静的か非静的かに関係なく、前提条件があります。

A. 変数の場合は、変数にアクセスできる必要があります。

B.メソッドがアクセス可能であることに加えて、満たす必要もあります。

① 静的メソッドの場合、特別な条件はありません

② 非静的メソッドの場合、$ を使用せずにメソッドを変更する必要があります。これは、つまり、静的でない変数/メソッドは呼び出されません。もちろん、静的変数/メソッドを呼び出すことに問題はありません。

次に、$object->… の使用とクラスの使用の違いを見てみましょう。 ::…:

1. $object->… を使用するには、

コンストラクターを実行してオブジェクトを作成する必要があります。

2. コンストラクターを実行せずに静的メソッド/変数を呼び出します。オブジェクトを作成します。

3. オブジェクトを作成するコンストラクターを実行せずに、class::... を使用して非静的メソッド/変数を呼び出します。

次に、2 と 3 は同じであるため、奇妙なことに Out です。静的メソッド/変数の存在のポイント?

静的: クラスのメンバーまたはメソッドを静的として宣言すると、クラスをインスタンス化せずに直接アクセスできます (静的メンバーはクラスに属しており、どのクラスにも属しません)。ただし、クラスのオブジェクト インスタンスは共有できます。

例のコードは次のとおりです:


コードは次のとおりです:

<?php 
Class Person{ 
    // 定义静态成员属性 
    public static $country = "中国"; 
    // 定义静态成员方法 
    public static function myCountry() { 
        // 内部访问静态成员属性 
        echo "我是".self::$country."人<br />"; 
    } 
} 
class Student extends Person { 
    function study() { 
        echo "我是". parent::$country."人<br />"; 
    } 
} 
// 输出成员属性值 
echo Person::$country."<br />";  // 输出:中国 
$p1 = new Person(); 
//echo $p1->country;   // 错误写法 
// 访问静态成员方法 
Person::myCountry();   // 输出:我是中国人 
// 静态方法也可通过对象访问: 
$p1->myCountry(); 
 
// 子类中输出成员属性值 
echo Student::$country."<br />"; // 输出:中国 
$t1 = new Student(); 
$t1->study();    // 输出:我是中国人 
?>
ログイン後にコピー

この例を実行すると、出力は次のようになります:

中国
私は中国人です。
私は中国人です
中国
私は中国人です

概要: クラス内の静的メンバーのプロパティまたはメソッドにアクセスするには、self:: ($slef ではないことに注意) を使用します。コードは次のとおりです:


コードは次のとおりです:

slef:: $country
slef:: myCountry()
ログイン後にコピー

サブクラス内の親クラスの静的メンバーのプロパティまたはメソッドにアクセスするには、parent:: ($parent ではないことに注意) を使用します。コードは次のとおりです:


コードは次のとおりです:

parent:: $country
parent:: myCountry()
ログイン後にコピー

外部静的メンバーへのアクセス

プロパティとメソッド はクラス名/サブクラス名::、コードは次のとおりです:

コードは次のとおりです:

Person::$country
Person::myCountry()
Student::$country
ログイン後にコピー

ただし、静的メソッドには通常のオブジェクトを通じてアクセスすることもできます。

例、静的変数を宣言します。コードは次のとおりです:

コードは次のとおりです:

<?PHP 
   function foo(){ 
   static $int = 0;// correct 
   static $int = 1+2;   // wrong (as it is an expression) 
   static $int = sqrt(121); // wrong (as it is an expression too) 
   $int++; 
   echo $int; 
   } 
?>
ログイン後にコピー

例、静的変数の使用例、コードは次のとおりです:


コードは次のとおりです:

<?PHP 
   function Test() 
   { 
   static $w3sky = 0; 
   echo $w3sky; 
   $w3sky++; 
   } 
?>
ログイン後にコピー

これで、Test() 関数が呼び出されるたびに、$w3sky の値が出力され、1 ずつ増加します。

静的変数は、

再帰関数 を処理する方法も提供します。再帰関数は無限に再帰する可能性があるため、記述するときは注意してください。再帰を終了するための十分なメソッドがあることを確認する必要があります。再帰的に 10 までカウントするこの単純な関数を考えてみましょう。静的変数 $count を使用して、いつ停止するかを決定します。

例、静的変数と再帰関数、コードは次のとおりです:


コードは次のとおりです:

<?PHP 
   function Test() 
   { 
   static $count = 0; 
    
   $count++; 
   echo $count; 
   if ($count < 10) { 
   Test(); 
   } 
   $count--; 
   } 
?>
ログイン後にコピー

注: 静的変数は、

expression の結果に従って宣言できます。値を割り当てるために宣言で使用すると、解析エラーが発生します。


PHP では、クラスのメソッド/変数にアクセスする方法が 2 つあります:
1. オブジェクト $object = new Class() を作成し、「->」を使用して $object->attribute/function を呼び出します。ただし、変数/メソッドがアクセス可能であることが条件です。
2. 静的か非静的かに関係なく、クラスのメソッド/変数: class::attribute/function を直接呼び出します。ただし、前提条件があります:
A. 変数の場合、その変数にアクセスできる必要があります。
B. メソッドの場合、アクセス可能であることに加えて、次の条件も満たす必要があります。
b1) 静的メソッドの場合、特別な条件はありません。
b2) 非静的メソッドの場合。 、メソッド内で $this が使用されていない、つまり非静的変数/メソッドの呼び出しがないように変更する必要があります。もちろん、静的変数/メソッドの呼び出しには問題ありません。

次に、$object->… の使用と class::…: の使用の違いを見てみましょう。 $object->… を使用する場合、オブジェクトを作成するためにコンストラクターを実行する必要があります
2。 . class:: ... を使用する 静的メソッド/変数を呼び出す場合、オブジェクトを作成するためにコンストラクターを実行する必要はありません。
3. 非静的メソッド/変数を呼び出すには、class::... を使用します。オブジェクトを作成するためにコンストラクターを実行する必要はありません。

すると、2と3は同じなので、静的メソッド/変数の存在意義は何でしょうか?
明らかに次のような違いが存在します:
1. 静的変数
静的メンバーは 1 つの変数値のみを保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのメンバーを共有します。
2. 静的メソッド
静的メソッドは class::... を使用して直接呼び出すことができますが、非静的メソッドは、前に説明したように、 class::... メソッドを使用して呼び出す前に特定の制限を満たす必要があります

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

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