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

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

藏色散人
藏色散人転載
2019-11-15 14:13:422509ブラウズ

関数内の静的変数

静的静的変数の理解

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

静的変数は静的記憶方式に属し、その記憶領域はメモリ内の静的データ領域です (記憶ユニットは静的記憶領域に割り当てられます)。この領域のデータは、システム全体にわたってこれらの記憶領域を占有します。 (プログラムの実行中は解放されません)、プログラム全体が終了するまでそのメモリアドレスは変化しないと考えることもできます (逆に、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%

上記の例からもわかるように、staticキーワードは参照転送に影響を与えるので、&を使って変数$cacheの値やアドレスを変更しようとしても、doStuff()のif判定には影響しません。 function;

さらに、doStuff() 関数では、静的変数 $cache は不変ではありません。$cache は null から %重いデータベースのものなど%;

Staticクラス内のメソッドとプロパティ

# クラスをオブジェクトを生成するためのテンプレート、オブジェクトをアクティブなコンポーネントとみなします。クラスをインスタンス化し、オブジェクトを取得して、このオブジェクトのメソッドとプロパティにアクセスします。 。

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

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

例:

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

● 静的メソッドにはアクセスできません 通常のプロパティとこれらのプロパティとメソッドはオブジェクトに属しているため、このクラスのメソッドと呼ばれますが、静的メソッドとプロパティはクラス変数のメソッドとも呼ばれます。

# 現在のクラス (サブクラス以外) の静的メソッドまたはプロパティにアクセスするには、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
非延迟静态绑定
延迟静态绑定

self キーワードを使用すると現在のクラス (A) が参照されるため、取得されるのは aa( ) クラス A のメソッド 戻り値;

php5.3 以降では、呼び出されたクラスを参照するサブクラスの aa() メソッドを static を使用して取得できます。

概要:

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

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

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