ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるstaticキーワードの定義、遅延バインディング、selfキーワードとの違い

PHPにおけるstaticキーワードの定義、遅延バインディング、selfキーワードとの違い

墨辰丷
墨辰丷オリジナル
2018-06-09 10:38:041289ブラウズ

この記事では、PHP における static キーワードの定義、late binding、self キーワードとの違いを中心に紹介しますので、興味のある方は参考にしていただければ幸いです。

概要

デザイン パターンを学習しています。以前にシングルトン パターンに関する記事がありましたが、この記事を読み直してみました。静的キーワードをよく理解してください。もう一度見直してください。

静的キーワード

PHP の静的メンバーとメソッドの特徴は次のとおりです。

1. 静的メンバーには、クラスですが静的メソッドは問題ありません。
2. 静的メンバーには -> 演算子を使用してアクセスできません。
3. 静的メソッドのスコープ内では、$this キーワードを使用できません。つまり、静的メソッドでは通常のメンバー変数にアクセスできません。
4. 静的メンバーとメソッドには、オブジェクトをインスタンス化せずに、クラス名を介して直接アクセスできます。

後期静的バインディング

PHP 5.3.0 以降、PHP には後期静的バインディングと呼ばれる機能が追加されました。これは継承スコープで使用されます。 静的に呼び出されるクラスへの内部参照。

正確に言うと、遅延静的バインディングの動作原理は、前の「非転送呼び出し」(非転送呼び出し) にクラス名を格納することです。静的メソッド呼び出しを行う場合、クラス名は明示的に指定されたもの (通常は :: 演算子の左側) であり、非静的メソッド呼び出しを行う場合は、オブジェクトが属するクラスです。いわゆる「転送呼び出し」とは、self::、parent::、static::、および forward_static_call() の方法で行われる静的呼び出しを指します。 get_called_class() 関数を使用すると、呼び出されたメソッドのクラス名を取得でき、static:: はそのスコープを示します。


この機能を理解するには、マニュアルの例を参照してください。

self vs static

デモを使用するself と static の違いを直接説明します。
自己例:

コードは次のとおりです:

<?php
class Vehicle {
    protected static $name = &#39;This is a Vehicle&#39;;
    public static function what_vehicle() {
        echo get_called_class()."\n";                
        echo self::$name;
    }
}
class Sedan extends Vehicle {
    protected static $name = &#39;This is a Sedan&#39;;
}
Sedan::what_vehicle();

プログラムの出力:

コードは次のとおりです:

SedanThis is a Vehicle

静的な例:

コードは次のとおりです:

<?php
class Vehicle {
    protected static $name = &#39;This is a Vehicle&#39;;
    public static function what_vehicle() {
        echo get_called_class()."\n";        
        echo static::$name;
    }
}
class Sedan extends Vehicle {
    protected static $name = &#39;This is a Sedan&#39;;
}
Sedan::what_vehicle();

プログラムの出力:

コードは次のとおりです:

Sedan
This is a Sedan

要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

Snoopy クラスを使用して HTML ファイルを解析する方法

php post をシミュレートします リクエストの 3 つの一般的な使用法

php によるイベント メカニズムの定義と実装

以上がPHPにおけるstaticキーワードの定義、遅延バインディング、selfキーワードとの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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