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 プロキシ転送構成を通じてクロスドメイン API プロキシ転送を実装する方法

序文WEB 開発では、クロスドメイン リクエストが頻繁に発生します。クロスドメインの問題を解決する方...

Vueは複数のカウントダウンを同時に設定する機能を実装しています

この記事の例では、複数のカウントダウンを同時に設定するためのVueの具体的なコードを参考までに共有し...

XHTML 入門チュートリアル: テキストの書式設定と特殊文字

<br />このセクションでは、XHTML でテキストの書式設定と特殊文字を実装する方法...

MySQL 8.0.24 リリースノートのいくつかの改善点

目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...

Webフォーム作成スキル

実際、上記の 3 つの表はいずれも 3 行 3 列です。区切り線を非表示にするコツはルールにあります...

CSSはヒントボックス、バブルボックス、三角形を作成します

場合によっては、ページにプロンプ​​ト ボックスやバブル ボックスが必要になることがあります。CSS...

Alibaba Cloud ドメイン名と IP バインディングの手順と方法

1 Alibaba Cloud コンソールに入り、ドメイン名コンソールを見つけて、バインドするドメイ...

Reactにおける不変値の説明

目次不変の値とは何ですか?不変の値を使用するのはなぜですか? Reactのパフォーマンス最適化は不変...

CSS初心者向けチュートリアル: 背景画像を画面全体に表示する

インターフェース全体に背景画像を表示したい場合は、当然 body に背景を追加することを考えます。コ...

ウェブページで Enter キーを押すと自動的にフォームを送信し、他のページにジャンプするソリューション

ウェブページでEnterキーを押すと、フォームは自動的に送信され、他のページに移動します。クエリフォ...

MySQL インストール プロンプト「詳細なヘルプについては NET HELPMSG 3534 と入力してください」の解決方法

今日、MySQL をインストールすると次のエラー メッセージが表示されます。 かなり長い時間ネットで...

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...

js で 0ms 遅延タイマーを実装するいくつかの方法

目次キューマイクロタスク非同期/待機メッセージチャネルやっと付録ここ二日間、「タイムリーな setT...

WeChatミニプログラムの開発をスピードアップするためのヒント

1. app.jsonを使用してページを作成する私たちの通常の開発習慣によれば、新しいページを作成す...

mysql バックアップ スクリプト mysqldump の使い方の詳細な説明

この記事では、参考までにMySQLバックアップスクリプトを紹介します。具体的な内容は次のとおりです。...