ホームページ  >  記事  >  バックエンド開発  >  PHPのstaticキーワードを理解する

PHPのstaticキーワードを理解する

angryTom
angryTom転載
2019-11-26 17:35:003190ブラウズ

PHPのstaticキーワードを理解する

#php の static キーワードの理解

static 静的変数の理解

静的変数の型指定子は静的です。

静的変数は静的記憶方式に属し、その記憶領域はメモリ内の静的データ領域です (記憶ユニットは静的記憶領域に割り当てられます)。この領域のデータは、システム全体にわたってこれらの記憶領域を占有します。 (プログラムの実行中は解放されません)、プログラム全体が終了するまでそのメモリアドレスは変化しないと考えることもできます (逆に、auto 自動変数、つまり、動的ローカル変数は、動的ストレージ カテゴリに属し、動的ストレージ スペースを占有します (呼び出しが完了した後に解放される関数)。静的変数はプログラムの実行中に常に存在しますが、その範囲外では使用できません。

さらに、静的保存メソッドに属する数量は、必ずしも静的変数であるとは限りません。例: 外部変数は静的ストレージ メソッドに属しますが、必ずしも静的変数である必要はありません。静的外部変数または静的グローバル変数になる前に、静的に定義する必要があります。

すべてのグローバル変数は静的変数であり、ローカル変数は、型修飾子 static を使用して定義されている場合にのみローカル静的変数になります。

静的変数はどこにでも適用できます。アプリケーションが成功すると、他の同様のアプリケーションは受け入れられなくなります。

静的変数は値を変更できないという意味ではなく、値を変更できない量を定数と呼びます。保持する値は変更可能であり、最新の状態を保ちます。関数が呼び出されたとき、または関数が終了したときに変化しないため、静的であると言われます。つまり、最後に関数を呼び出したときに静的変数に特定の値を割り当てた場合、その値は次回関数が呼び出されたときも変更されません。

関数内の静的変数

静的な使用法

1、次の例を参照してください:

function doStuff(&$cache) {
    static $cache = null;
    if ($cache === null) {
        echo $cache = '%heavy database stuff or something%';
    }
}
$cache = 'not null';
doStuff($cache);
// Output
%heavy database stuff or something%

そして、doStuff ( ) 関数、静的変数 $cache は不変ではなく、$cache は null から %重いデータベースのものか何か% に変更されました。上記の例から、 & To try を使用した場合でも、static キーワードが参照転送に影響を与えることがわかります。変数 $cache の値とアドレスを変更しても、 doStuff() 関数の if 判定には影響しません;

#クラスの静的メソッドと属性#● クラスをオブジェクト生成用のテンプレートとして扱い、オブジェクトをアクティブ コンポーネントとして使用し、クラスをインスタンス化し、オブジェクトを取得して、オブジェクトのメソッドとプロパティにアクセスします。

例 $foo = new Foo(); $foo はクラス Foo のインスタンス化後のオブジェクトです。

# 静的メソッドは、クラスをスコープとする関数です。インスタンス化せずに直接静的メソッドにアクセスできます。

例:

class Foo()
{
    public static function a(){}
}
// 访问a();
Foo::a();

# 現在のクラス内 ( static にアクセスするには非サブクラスのメソッドまたは属性) use self::method()、注意: self は親クラスの静的メソッドおよび属性を呼び出すことができます; ● 静的メソッドは、このクラスの通常の属性およびメソッドにアクセスできません。オブジェクト、静的メソッドおよびプロパティは、クラス変数のメソッドとも呼ばれます。

遅延静的バインディング

最初に例を見てみましょう

header("Content-type: text/html; charset=utf-8");
class A
{
    public static function aa()
    {
        echo "非延迟静态绑定<br>";
    }
     
    public static function bb()
    {
        echo self::aa();  // Output 非延迟静态绑定
        echo static::aa(); // Output 延迟静态绑定
    }
}
class B extends A
{
    public static function aa()
    {
        echo "延迟静态绑定";
    }
     
    public static function cc()
    {
        echo self::bb();
    }
}
B::bb();
// Output
非延迟静态绑定
延迟静态绑定

php5.3 以降では、static を使用して aa() を取得できます。サブクラス Method。呼び出されるクラスを参照します。 self キーワードを使用すると現在のクラス (A) が参照されるため、取得されるのはクラス A の aa() メソッドの戻り値です;

概要:

静的バインディングの遅延バインディングキーワード これには多くの用途があり、通常はプロジェクトの作業中に要約できます。

PHP 関連の知識の詳細については、

PHP 中国語 Web サイト

をご覧ください。

以上がPHPのstaticキーワードを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。