PHP クラスにおける static と self の違いの簡単な分析

PHP クラスにおける static と self の違いの簡単な分析

メソッドが定義されているクラスに応じて、現在のクラスへの静的参照を取得するには、self:: または __CLASS__ を使用します。

static:: を使用すると、現在のメソッドが定義されているクラスに解決されなくなり、実際には実行時に計算されます。静的メソッドの呼び出しに使用できるため (ただし、これに限定されません)、「静的バインディング」とも呼ばれます。

静的バインディングは、継承スコープ内で静的に呼び出されたクラスを参照するために使用される、PHP 5.3.0 で追加された機能です。

PHP クラスにおける static と self の違い。PHP クラスの定義では、self と static がよく使われます。実行すると、結果に違いがないことがよくありますが、明らかに違いがあります。違いがないのなら、なぜ 2 つあるのでしょうか。

1. 両者の違い

静的は遅延バインディングを使用する

そのため、static は親クラスからの呼び出しなのか子クラスからの呼び出しなのかを正確に知ることができます。

たとえば、これはスタティックが賢い子供であることを示しています。彼は親戚全員を正確に認識できます。

自分はちょっとバカだ、自分の両親しか知らない

2. コードの見た目が違う

次のコードからわかる

自己とは、自分を定義する階級のことであり、つまり、彼は自分の両親しか知らない。

静的とは、彼を呼び出すクラスを指し、つまり、彼は親戚を認識できる

<?php
クラスの保護者
{
    protected static $name = '私はあなたの親です';
 
    パブリック静的関数 who_self()
    {
        self::$name を返します。
    }
 
    パブリック静的関数 who_static()
    {
        static::$name を返します。
    }
 
    パブリック静的関数 get_self()
    {
        新しい self() を返します。
    }
 
    パブリック静的関数 get_static()
    {
        新しいstatic()を返します。
    }
}
 
クラス親族は親族を拡張する
{
    protected static $name = '私はあなたの親戚です';
}
 
var_dump(kinsfolk::who_self()); //私はあなたの親ですvar_dump(kinsfolk::who_static()); //私はあなたの親戚ですvar_dump(kinsfolk::get_self()); //object(parents)#1 (0) {}
var_dump(kinsfolk::get_static()); //オブジェクト(kinsfolk)#1 (0) {}

簡単に言えば、

Self はそれが記述されているクラスであり、このクラスが実際に呼び出されます。

staticは使用されているクラス、つまり親クラスで記述したstaticを表し、それがサブクラスによって上書きされ、サブクラスのメソッドまたは属性が使用されます。

要約する

PHP クラスにおける static と self の違いに関するこの記事はこれで終わりです。PHP クラスにおける static と self の違いについての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • PHPはクラスをスケジュールする2つの方法を実装しています
  • PHP7とPHP5の違いの詳細な分析
  • PHP でユーザーパスワードを生成する 2 つの方法
  • PHP で PDO を使用して大きなデータ オブジェクトを操作する方法
  • PHPはWorkmanフレームワークを使用してソケットサービスを実装し、クライアントに接続します。

<<:  MySQLデータベースとテーブルシャーディングの概要

>>:  UbuntuでGRUBの起動時間を変更する

推薦する

MySql5.7.21 インストールポイント記録メモ

ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...

MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明

目次導入効果原理形状練習するこの記事では、例を使用して、MySQL マスター/スレーブ レプリケーシ...

Docker+DockerCompose を使用して Web アプリケーションをカプセル化する方法

目次テクノロジースタックバックエンドビルドAPIフロントエンドウェブ構築ゲートウェイ建設ゲートウェイ...

Centos7のシステム言語を簡体字中国語に変更する方法

例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...

CSS3 クリックボタン円形進行ティック効果実装コード

目次8. CSS3 クリックボタンの円形進捗チェック効果8.1 画像プレビュー8.2 index.h...

Linuxファイルの基本属性の知識ポイントのまとめ

Linux システムは典型的なマルチユーザー システムです。異なるユーザーは異なる立場にあり、異なる...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

要素 el-button ボタンコンポーネントの使用の詳細な説明

1. 背景ボタンは非常によく使われており、Element のボタン機能は非常に包括的です。この記事で...

Win10 + Ubuntu20.04 LTS デュアルシステムブートインターフェースの美化

エフェクト表示組み込みのブートインターフェースがあまりにも醜いので、テーマをダウンロードして美しくし...

Linuxでサーバーのハードウェア情報を表示する方法

みなさんこんにちは。今日は12連休ですが、何かお買い物はしましたか?今日は「Linux View S...

XHTML 入門チュートリアル: テーブルタグの応用

<br />テーブルは XHTML では扱いにくいタグなので、このセクションで理解するだ...

MySql マスタースレーブレプリケーションの実装原理と構成

データベースの読み取りと書き込みの分離は、トラフィック量の多い大規模システムやインターネット アプリ...

VueはBaidu Mapsを使用して都市の位置特定を実現

この記事では、参考までに、Baidu Mapsを使用して都市の位置特定を実現するVueの具体的なコー...

Windows で MySQL のルート パスワードを忘れた場合にリセットする方法

私のマシン環境: Windows 2008 R2 MySQL 5.6 Baidu で「Windows...

CSSで半透明の背景色を実現する2つの方法について簡単に説明します。

ページをレイアウトする際、ユーザーに異なる視覚効果を与えるために、div の背景色を半透明の状態に設...