PHPのstaticとconst

WBOY
リリース: 2016-07-30 13:30:36
オリジナル
1282 人が閲覧しました

static キーワードは、クラス内のメンバー プロパティとメンバー メソッドが静的であることを示します。静的メンバーの利点は何ですか?先ほど人間を「人物」と宣言しましたが、「人物」クラスに「その人物が属する国」の属性を追加すると、各オブジェクトが持つ「人物」クラスを使用して数百以上のインスタンス オブジェクトをインスタンス化できます。プロジェクトが中国人向けに開発されている場合、各オブジェクトは「中国」という属性を持ちます。「国」属性を作成すると、他の属性は異なります。静的メンバーの場合、メモリ内に国属性が 1 つだけあり、数百以上のオブジェクトがこの属性を共有すると、静的メンバーはクラスに属し、どのオブジェクト インスタンスにも属さないため、外部アクセスを制限できます。クラスが初めてロードされるときに領域が割り当てられ、他のクラスからはアクセスできず、クラスのこのメンバーはある程度までアクセスできます。

それを分析してみましょう。メモリの観点から見ると、メモリは論理的に 4 つのセグメントに分割され、オブジェクトは「ヒープ メモリ」に配置され、オブジェクトの参照は「スタック メモリ」に配置されます。初期化静的セグメント」。以下に示すように、クラスが初めてロードされるときに配置され、ヒープ メモリ内のすべてのオブジェクトで共有できるようになります。

PHPのstaticとconst

クラスの静的変数はグローバル変数は、グローバル関数と同様に、クラスの静的メソッドと同様に、クラスのすべてのインスタンスで共有できます。

0101 <?

02classPerson

03{

04 //下面是人的静态成员属性

05 publicstatic$myCountry= "中国";

06

07 // var $name; //人的名子

08

09 //这是人的静态成员方法

10 publicstaticfunctionsay() {

11 echo"我是中国人";

12 }

13}

14

15//输出静态属性

16echoPerson::$myCountry;

17

18//访问静态方法

19Person::say();

20

21//重新给静态属性赋&#20540;

22Person::$myCountry= "美国";

23echoPerson::$myCountry;

<?
24?>
🎜🎜🎜🎜🎜🎜🎜02🎜🎜< code>class🎜🎜🎜🎜🎜🎜🎜🎜🎜03🎜🎜{🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜04🎜🎜 //以下は people の静的メンバー属性です🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜05 🎜🎜 publicstatic$my Country= " 中国";🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜06🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜07 code>🎜🎜 // var $name // その人の名前🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜08</code >🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>09🎜🎜 //これは人間の静的メンバー メソッドです🎜🎜🎜🎜 🎜🎜🎜 🎜🎜🎜10🎜🎜 publicstaticfunction Say() {🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜11🎜🎜 echo「私は中国人です」 ";🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜12🎜🎜 }🎜🎜 🎜🎜 🎜🎜🎜🎜🎜🎜13🎜🎜}🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜14🎜🎜🎜🎜 🎜🎜 🎜🎜 🎜🎜🎜🎜15🎜🎜//静的属性を出力します🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜16🎜🎜エコー 人::$my Country;🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜17</code >🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>18🎜🎜//静的メソッドにアクセスします🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 19< /code >🎜🎜<code>person::say();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 20 21🎜🎜//再割り当て静的属性🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜22🎜🎜person::$my Country= < /code><code>"米国";🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜23 🎜🎜echo 人::$my Country;🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜24🎜🎜 ?>🎜🎜🎜🎜

クラスが初めてロードされるときに静的メンバーが作成されるため、前述したように、クラス外のオブジェクトを必要とせずにクラス名を使用して静的メンバーにアクセスできます。静的メンバーは各インスタンスによって共有されます。クラスのオブジェクトの場合、オブジェクトを使用してクラス内の静的メンバーにアクセスできますか?上の図から、各オブジェクト内に静的メンバーが存在しないことがわかりますが、各オブジェクトは共有できるため、オブジェクトを使用してメンバーにアクセスする場合、そのような属性定義はありません。オブジェクトアクセスを使用すると、静的メンバーは存在しません。 Java などの他のオブジェクト指向言語では、オブジェクトを使用して静的メンバーにアクセスできますが、PHP でオブジェクトを使用して静的メンバーにアクセスできる場合は、静的メンバーを使用しないようにする必要があります。プロジェクトにアクセスするためにクラス名を使用することが目的です。

クラス内の静的メソッドはクラスの静的属性にのみアクセスできます

。クラス内の静的メソッドはクラスの非静的メンバーにアクセスできません。理由は非常に簡単です。他のメンバーについては、$this 参照を使用する必要があり、$this 参照ポインターは、このメソッドを呼び出すオブジェクトを表します。静的メソッドはオブジェクトで呼び出されるのではなく、クラス名を使用してアクセスされると述べました。基本的に、オブジェクトは存在せず、$this への参照も存在しません。$this への参照がなければ、クラス内の非静的メンバーにアクセスできません。また、クラス内の静的メンバーはオブジェクトなしで使用できるためです。 $this が存在しないため、静的メソッド self と $ の他の静的メンバーにアクセスするには、特別なクラス "self" を使用します。これは似ていますが、self がこの静的メソッドが配置されているクラスを表す点が異なります。したがって、静的メソッドでは、メソッドが配置されているクラスの「クラス名」を使用することも、他の静的メンバーにアクセスするために「self」を使用することもできます。特別な事情がない場合、通常は後者を使用します。 、つまり、「self::Member 属性」メソッドです。

01

<?
01<?

02classPerson

03{

04 //下面是人的静态成员属性

05 publicstatic$myCountry= "中国";

06

07 //这是人的静态成员方法, 通过self访问其它静态成员

08 publicstaticfunctionsay() {

09 echo"我是". self::$myCountry;

10 }

11}

12

13//访问静态方法

14Person::say();

15?>

在非静态方法里可不可以访问静态成员呢,当然也是可以的了,但是也不能使用“$this”引用,也要使用类名或是”self::成员属性的形式”。

const是一个定义常量的关键字,在PHP中定义常量使用的是“define()”这个函数,但是在类里面定义常量使用的是“const”这个关键字,类似于C中的#define如果在程序中改变了它的值,那么会出现错误,用“const”修饰的成员属性的访问方式和“static”修饰的成员访问的方式差不多,也是使用“类名”,在方法里面使用“self”关键字。但是不用使用“$”符号,也不能使用对象来访问。

01 <?php
🎜🎜🎜02🎜🎜クラス🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜03🎜🎜{🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜04🎜🎜 //以下は people の静的メンバー属性です🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 05🎜🎜 publicstatic$my Country= "中国";🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜06🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜07< /code >🎜🎜<code> //これは人間の静的メンバー メソッドであり、self を通じて他の静的メンバーにアクセスします🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜08< /code >🎜🎜<code> publicstaticfunctionsay() {🎜🎜🎜 🎜🎜 🎜🎜🎜🎜🎜09🎜🎜 echo「私は」。 </ code><code>$my Country;🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜10🎜🎜 } 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜11🎜🎜}🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜12</ code> 🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>13🎜🎜//静的メソッドにアクセスする🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<コード>14 code>🎜🎜person::say();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜15🎜🎜?> code>🎜🎜 🎜🎜🎜🎜🎜🎜 非静的メソッドで静的メンバーにアクセスすることは可能ですか? もちろん可能ですが、「$this」参照は使用できません。クラス名または「self:: member」も使用する必要があります。属性フォーム」。 🎜🎜const は定数を定義するためのキーワードです。PHP で定数を定義するには "define()" 関数を使用しますが、クラス内で定数を定義するには、C の #define に似た "const" キーワードを使用します。プログラム内で値を変更するとエラーが発生します。「const」で変更したメンバ属性も「クラス名」で変更した場合と同様にアクセスされます。キーワード。ただし、「$」記号を使用する必要はなく、オブジェクトを使用してアクセスすることもできません。 🎜🎜🎜🎜🎜🎜01🎜🎜<?php🎜🎜🎜🎜

02classMyClass

03{

04 //定义一个常量constant

05 constconstant = 'constant value';

06

07 functionshowConstant() {

08 echoself::constant . " "02// 使用self访问,不要加“$”

09 }

10}

11

12echoクラス" "; //使用类名来访问,也不加“$”

13

14$class= newMyClass();

15$class->showConstant();

16 // echo $class::constant;  是不允许的
17 ?>MyClass

🎜🎜🎜🎜03🎜🎜🎜 🎜{🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜04🎜🎜🎜 🎜 🎜🎜//定数を定義します🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜05🎜🎜🎜🎜 🎜'定数値'🎜🎜;🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜 🎜06🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜07🎜🎜🎜🎜 🎜🎜function🎜🎜showConstant() { 🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜08🎜🎜🎜🎜 🎜🎜echo🎜🎜self::constant .🎜🎜」「🎜🎜;」 🎜🎜// アクセスするには self を使用し、「$」を追加しないでください🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜09🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜10🎜🎜🎜🎜 }🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜11🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜12🎜🎜🎜🎜echo🎜🎜MyClass::constant 。 🎜🎜" "🎜🎜; 🎜🎜//$を付けずにクラス名でアクセス🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜13🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜 14 🎜🎜🎜🎜$class🎜🎜= 🎜🎜new🎜🎜MyClass();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜15🎜🎜🎜🎜$class 🎜🎜->showConstant();🎜🎜🎜 🎜 🎜🎜🎜🎜🎜🎜🎜🎜16🎜🎜🎜🎜// echo $class::constant; は許可されません🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜17🎜 🎜 🎜🎜?>🎜🎜🎜🎜 🎜 🎜 上記では、PHP の static と const について、関連コンテンツも含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜 🎜 🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート