目次
静的変数
静的メソッド

PHPの静的

Jun 21, 2016 am 08:47 AM
parent self static this


静的メンバーはクラス変数の一種であり、クラスのインスタンスではなくクラス全体に属すると考えることができます。一般的なインスタンス変数とは異なり、静的メンバーは 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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

e からの NameResolutionError(self.host, self, e) の理由とその解決方法 e からの NameResolutionError(self.host, self, e) の理由とその解決方法 Mar 01, 2024 pm 01:20 PM

エラーの理由は、urllib3 ライブラリの例外タイプである NameResolutionError(self.host,self,e)frome です。このエラーの理由は、DNS 解決が失敗したこと、つまり、ホスト名または IP アドレスが試みられたことです。解決できるものが見つかりません。これは、入力された URL アドレスが間違っているか、DNS サーバーが一時的に利用できないことが原因である可能性があります。このエラーを解決する方法 このエラーを解決するにはいくつかの方法があります。 入力された URL アドレスが正しいかどうかを確認し、アクセス可能であることを確認します。 DNS サーバーが利用可能であることを確認します。コマンド ラインで「ping」コマンドを使用してみてください。 DNS サーバーが利用可能かどうかをテストします。プロキシの背後にある場合は、ホスト名の代わりに IP アドレスを使用して Web サイトにアクセスしてみてください。

Pythonでselfを使用する方法 Pythonでselfを使用する方法 May 17, 2023 pm 10:40 PM

Python で self の使用法を紹介する前に、まず Python のクラスとインスタンスを紹介しましょう。オブジェクト指向の最も重要な概念はクラスとインスタンスであることはわかっています。クラスは抽象的なテンプレートです。学生のような抽象的なものです。 Student クラスによって表されます。インスタンスはクラスに基づいて作成された特定の「オブジェクト」であり、各オブジェクトはクラスから同じメソッドを継承しますが、そのデータは異なる場合があります。 1. Student クラスを例にします。Python では、クラスは次のように定義されます: classStudent(object):pass(Object) は、クラスがどのクラスから継承するかを示します。Object クラスはすべて

Vue2 がこれを通じてさまざまなオプションのプロパティにアクセスできる理由について話しましょう Vue2 がこれを通じてさまざまなオプションのプロパティにアクセスできる理由について話しましょう Dec 08, 2022 pm 08:22 PM

この記事は、vue ソース コードを解釈するのに役立ち、これを使用して Vue2 のさまざまなオプションのプロパティにアクセスできる理由を紹介します。

Python で親クラスのプロパティにアクセスするにはどうすればよいですか? Python で親クラスのプロパティにアクセスするにはどうすればよいですか? Aug 26, 2023 am 10:17 AM

オブジェクト指向プログラミングでは、継承により、既存のクラスのプロパティとメソッドを継承する新しいクラスを作成できます。この強力な概念により、プログラムのコードの再利用、モジュール性、拡張性が可能になります。親クラスの属性にアクセスする前に、次のことを確認してください。

この点を理解してフロントエンド担当者の7割をキャッチアップした記事 この点を理解してフロントエンド担当者の7割をキャッチアップした記事 Sep 06, 2022 pm 05:03 PM

同僚は、これによって指摘されたバグのために立ち往生しました。Vue2 のこの指摘の問題により、アロー関数が使用され、その結果、対応する props を取得できなくなりました。私がそれを彼に紹介したとき、彼はそれを知りませんでした。その後、私はわざとフロントエンド コミュニケーション グループに目を向けました。これまでのところ、フロントエンド プログラマーの少なくとも 70% はまだそれを理解していません。今日私はそれを共有しますyou this link. もしすべてが間違っている場合 まだ学習していない場合は、大きな口を与えてください。

C言語におけるstaticの機能と使い方は何ですか? C言語におけるstaticの機能と使い方は何ですか? Jan 31, 2024 pm 01:59 PM

C 言語における static の役割と使用法: 1. 変数スコープ; 2. ライフサイクル; 3. 内部関数; 4. グローバル変数の変更; 5. 関数の変更; 6. その他の用途; 詳細な紹介: 1. 変数スコープの場合変数の前に static キーワードがある場合、変数のスコープは、変数が宣言されているファイルに制限されます。言い換えると、変数は「ファイル レベルのスコープ」であり、「」の発生を防ぐのに非常に役立ちます。変数の重複定義問題; 2. ライフサイクル、静的変数はプログラム実行開始時に一度初期化され、プログラム終了時に破棄されるなど。

C言語のstaticキーワードの実践的な応用シナリオと使用スキル C言語のstaticキーワードの実践的な応用シナリオと使用スキル Feb 21, 2024 pm 07:21 PM

C 言語の static キーワードの実践的な応用シナリオと使用スキル 1. 概要 static は C 言語のキーワードであり、変数や関数を変更するために使用されます。その機能は、プログラムの実行中にライフサイクルと可視性を変更し、変数と関数を静的にすることです。この記事では、static キーワードの実際のアプリケーション シナリオと使用テクニックを紹介し、具体的なコード例を通じて説明します。 2. 静的変数により変数のライフ サイクルが延長される static キーワードを使用してローカル変数を変更すると、変数のライフ サイクルを延長できます。

Java で static、this、super、final を使用する方法 Java で static、this、super、final を使用する方法 Apr 18, 2023 pm 03:40 PM

1. static まず次のプログラムを見てください: publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}}セグメント プログラムは、Java を学習したことのあるほとんどの人には馴染みのあるものです。 Java を学習したことがなくても、C などの他の高級言語を学習したことがある場合でも、このコードの意味は理解できるはずです。これは単に「Hello, world」を出力するだけであり、他に用途はありませんが、静的キーワードの主な目的を示しています。

See all articles