検索

PHPの静的

Jun 21, 2016 am 08:47 AM
parentselfstaticthis


静的メンバーはクラス変数の一種であり、クラスのインスタンスではなくクラス全体に属すると考えることができます。一般的なインスタンス変数とは異なり、静的メンバーは 1 つの変数値のみを保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのメンバーを共有します。

$this はクラスの現在のインスタンスのみを表し、self:: はクラス自体を表します。この演算子はクラス外のコードでは使用できず、継承ツリー階層内の位置を識別できません。つまり、拡張クラスで self スコープを使用する場合、self は基本クラスで宣言されたメソッドを呼び出すことができますが、常に拡張クラスでオーバーライドされたメソッドを呼び出します。 $this とは異なり、静的変数を使用する場合は、スコープ修飾子の後に $ 記号を追加する必要があります。

拡張クラスでは、基本クラスのメソッドがオーバーライドされると、親スコープを使用して基本クラスで定義されたメソッドを呼び出します。静的メンバーは親クラスにのみ所属することもできます。メンバーがサブクラスと親クラスの両方で宣言されている場合は、parant:: を使用して、サブクラス内の親クラスの変数にアクセスすることもできます。この場合、親クラスの静的メンバーとサブクラスの静的メンバーは異なる値を保持します。

:: 演算子の左側にクラスの名前を記述すると、クラスのインスタンスの作成を避けるために静的にメンバーにアクセスできます。クラスをインスタンス化する必要がなくなるだけでなく、クラスの各インスタンスが占めるシステム リソースの一部が小さくなるため、より効率的になります。

:: 演算子を使用してメンバー変数にアクセスする場合は、$ 記号の使用に再度注意する必要があります。 PHP は現在、動的静的変数の使用をサポートしていないため、つまり、変更可能な静的変数をサポートしていません。 $this->$var を使用する場合、アクセスされるメンバーは $var に含まれる変数の値です。 $ 記号を使用して変数にアクセスする代わりに、実際にはクラスの定数を探していますが、$this を介して定数にアクセスすることはできません。

PHP6 で提案されている static::scope により、self:: とparent:: を使用する必要がなくなります。関数を実装する最終クラスを指定する場合は、static:: を使用できます。この修飾子は、コードが実行される直前に、継承階層の最後のクラスのメンバーを計算します。 1 つのプロセスは遅延バインディングと呼ばれ、子クラスの静的変数をオーバーライドしたり、親クラスで宣言された関数から最後のメンバーにアクセスしたりすることができます。

場合によっては、すべてのクラス インスタンスで共有され、すべてのクラス インスタンスに関連するが、特定のオブジェクトからは呼び出すことができないフィールドやメソッドを作成することが必要になる場合があります。たとえば、Web ページへの訪問者数を追跡するクラスを作成するとします。クラスをインスタンス化するたびに訪問者数を 0 にリセットする必要はありません。この時点で、フィールドを静的スコープに設定できます。

<?php
    class visitors
    {
        private static $visitors = 0;
        function __construct()
        {
             self::$visitors&#43;&#43;;
        }
        static function getVisitors()
        {
            return self::$visitors;
        }
    }
    /* Instantiate the visitors class. */
    $visits = new visitors();
    echo visitors::getVisitors()."<br/>";
    /* Instantiate another visitors class. */
    $visits2 = new visitors();
    echo visitors::getVisitors()."<br/>";
?>

プログラムの実行結果:

1

2

$visitors フィールドは静的に宣言されているため、その値への変更はインスタンス化されたすべてのオブジェクトに反映されます。また、静的フィールドとメソッドは、this とアロー演算子ではなく、self キーワードとクラス名を使用して参照する必要があることに注意してください。これは、「通常の」メソッドを使用して静的フィールドを参照することは不可能であり、構文エラーが発生するためです。

クラス内で $this を使用して静的フィールドを参照することはできません。

静的変数

静的変数は関数のスコープ内にのみ存在する変数ですが、そのような変数の値は関数が実行された後も失われません。つまり、変数は次回も元の値を記憶します。関数が呼び出される時間。変数を静的として定義するには、変数の前に static キーワードを追加するだけです。

クラスでは、static キーワードには主に 2 つの用途があります。1 つは静的メンバーの定義、もう 1 つは静的メソッドの定義です。クラス内では、スコープ修飾子 (::) を使用して、さまざまなレベルのスコープの変数にアクセスできます。

静的メソッド

静的メソッドと非静的メソッドの間には重要な違いがあります。静的メソッドを呼び出すとき、クラスのインスタンスを所有する必要はなくなります。

静的メソッドと非静的メソッドを使用するための原則: まず、メソッドに $this 変数が含まれていない場合は、クラスのインスタンスが必要ない場合は静的メソッドにする必要があります。静的クラス。これにより、インスタンスの化学的な作業が不要になります。さらに、静的メソッドは特定のインスタンスに属さないため、$this 変数を静的メソッドで使用することはできません。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター