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の起動時間を変更する

推薦する

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

Apache をインストールした後、サービスを開始できません (サービスを開始するとエラー コード 1 が表示されます)

目次1. エラーメッセージ2. エラーの原因3. 解決策1. エラーメッセージ1. インストール後、...

CSS を使用して等アスペクト比のアダプティブ コンテナを実装する方法

最近、モバイル ページを開発しているときに、ページの幅が 100% の場合、高さは幅の半分になり、携...

デザイン理論: なぜ私たちは間違った場所を見ているのでしょうか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...

コメント付きのスネークゲームを実装する js

この記事の例では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有しています。具体...

Vueの最初のレンダリングのプロセス全体についての簡単な説明

目次1. Vueの初期化vue エントリ ファイルフルバージョンとランタイムバージョンの違い1.1、...

JavaScript 即時実行関数の使用状況分析

一般的に、関数は実行する前に呼び出す必要があることはご存じのとおりです。以下に示すように、関数を定義...

HTMLタグと基本要素の学習のまとめ

1. HTML の要素とタグ<br />要素は、1 つのタグまたは 1 組のタグによって...

MySQLにおけるrow_numberの実装プロセス

1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...

MySQLでテーブルインデックスを構築する方法

目次複数の種類のフィルタリングをサポート複数の範囲のクエリを避ける並べ替えを最適化するインデックスの...

Vue3 ドラッグ可能な左パネルと右パネルの分割コンポーネントの実装

目次コンポーネントの分解左パネル右パネル入力パラメータの分解小道具スロット具体的な実装ドラッグする方...

Windows10システムにMySQL 5.7.17をインストールする

オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

WeChatアプレットはシンプルな手書き署名コンポーネントを実装します

目次背景:必要:効果1. アイデア2. 実装1. ページとスタイル2. 初期化3. クリックすると4...