この記事では、PHP の静的属性と静的メソッドを理解し、静的の性質、静的変数と通常の変数の違いを紹介します。
メンバー変数とメソッドを呼び出すにはオブジェクトを使用する必要があると前に説明しました。インスタンス化したくないのですが、変数やメソッドに直接アクセスしたらどうなるでしょうか?これは静的関数を使用します。
変数やメソッドを定義するときは、それらの前に static キーワードを追加して静的に変換します。 pass Class name::double quotes for direct access.
上記の例を静的変数と静的メソッドに書き換え続けます:
class Classname //定义一个类, 类名不区分大小写 { static public $name; //定义静态成员变量; static public $height=180; //初始化赋值 static public $weight, $nationality; //可以一个语句定义多个变量 static protected $age; static public function player($name,$height, $weight, $age, $sex) { //定义静态成员方法, 以及方法形参 self::$name=$name; //为成员变量赋值, 使用了代词self:: self::$weight=$weight; self::$height=$height; if (self::$height<185 && self::$weight<=85){ return self::$name.',符合要求'; }else{ return self::$name.',不太行'; } } } echo Classname::$height; //180, 通过类名::访问静态变量 echo Classname::player('xiaoming',180,80,22, 'Male'); //通过类名::访问静态方法;
上記の例でわかるように、すべて変更しました。 $this は self に置き換えられます。$this は呼び出し元のオブジェクトを参照し、self はメソッドが配置されているクラス自体を参照するためです。静的メソッドはクラス名:: を介して直接呼び出すことができます。ここにはオブジェクトはありません。\ $this は、空の場合はエラーを報告します。したがって、静的メソッドで変数を呼び出すときは、$this を渡すことはできません。
self:: に続く変数には、$ が必要であることに注意してください。シンボル.
この静的を過小評価しないでください。静的を使用すると、単に直接呼び出すことができるだけではありません。メンバー変数の意味およびメソッドは根本的に変更されました:
In 静的メソッドでは静的変数 のみを呼び出すことができますが、通常の変数は呼び出すことができません。通常のメソッドは静的変数を呼び出すことができます。これは、の属性によって決まります。通常のメンバー変数は「オブジェクト」にバインドされているため、静的メソッドです。静的変数は「クラス」にバインドされています。
静的変数と通常の変数の違いについて詳しく説明します:
通常 メンバー変数はオブジェクトにバインドされています。異なるオブジェクトには独自のメンバー変数セットがあります。異なるオブジェクトのメンバー変数には独自の割り当てがあります。同じであっても、あなたのものはあなたのものです。
静的変数はクラスにバインドされています。静的変数が変更されると、このクラスのすべてのオブジェクトの値が変更されます。
静的変数も使用可能 アクセスは object:: 経由ですが、実際には同じクラスのオブジェクトは同じ静的変数の値にアクセスします 静的変数はサブクラスも含めたクラス全体で共有されていることがわかります.
したがって、オブジェクトの 1 つが破棄された場合でも、静的変数の値は保持されます。
#サブクラスは静的変数の値をオーバーライドすることもできます。親クラスのメンバー変数ですが、親クラスの静的変数はまだ存在しており、これら 2 つの静的メンバー変数は独立しています。これらは呼び出しクラス名に従って個別にアクセスされます。
例を挙げてみましょう:
class Shouji { static public $test; //定义一个静态变量 static function test5() //定义静态方法来操作并输出静态变量 { self::$test++; echo self::$test; } } class Shouji2 extends Shouji //定义一个子类 { static function test5() //定义子类的静态方法 { self::$test++; //访问并操作父类的静态变量 echo self::$test; } } $shouji1=new Shouji; //新建父类对象 $shouji1->test5(); //1, 通过对象调用静态方法 $shouji2=new Shouji; //新建另一个父类对象 $shouji2->test5(); //2, 在前一次操作基础上继续+1 $shouji3=new Shouji2; //新建子类对象 $shouji3->test5(); //3, 调用子类同名静态方法, 继续+1 echo Shouji::$test; //3, 通过父类::直接访问静态成员变量 echo $shouji1::$test; //3, 通过对象名::可以直接访问静态成员变量
Pass 上記の例では、次の点も要約できます:
サブクラスは親クラスの静的メソッドをオーバーライドできます。
メソッド内 静的変数にアクセスするには、:: シンボルを使用する必要があります。$this;
静的メソッドと静的変数はサブクラスによって継承されます。
静的変数 -> ではアクセスできませんが、:: (二重コロン) でアクセスできます。 # オブジェクトは、オブジェクト名を介して静的メンバー メソッドを直接呼び出すことができます -> これは、通常のメソッドを呼び出すのと同じです。
推奨学習: 「PHP ビデオチュートリアル
」
以上がPHP における静的とは何ですか?静的プロパティと静的メソッドの詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。