ホームページ  >  記事  >  バックエンド開発  >  PHP のマジック メソッドとマジック定数

PHP のマジック メソッドとマジック定数

不言
不言オリジナル
2018-06-01 16:30:021777ブラウズ

この記事は主に PHP のマジックメソッドとマジック定数を紹介しています。必要な友達に参考にしてもらいましょう

。 __construct()コンストラクター メソッド

オブジェクトをインスタンス化するとき、クラス名の後に括弧で囲まれたいくつかのパラメーター リストを追加します (コンストラクター メソッドの実際のパラメーターとして理解できます)

__destruct()

デストラクタメソッド

は、コンストラクタメソッドと対になっており、コンストラクタメソッドはオブジェクトが「誕生」するときに自動的に呼び出され、デストラクタメソッドはオブジェクトが「消滅」するときにシステムによって自動的に呼び出されます。 !

オブジェクトが消える前にデストラクターメソッドが呼び出されます

オブジェクトが消えるいくつかの状況

1、

unset

関数を明示的に使用して変数を破棄します

2、

スクリプトが消滅した後。実行が終了すると、また自動的に破棄されます

3、

オブジェクト変数の値を変更すると、それも自動的に破棄されますデストラクタメソッドの役割

主な役割は解放することですオブジェクトによって占有される追加のリソース!物体そのものではなく!

注:


デストラクター メソッドは通常、追加の定義を必要としません。追加のリソース (このオブジェクトに属さないリソース) を解放する場合にのみ必要です。 ) 意味! constructionコンストラクターとデストラクタの特性を要約します:


1、から___2から始まります。

phpには上記3つの特徴を同時に満たすメソッドがたくさんあり、それらは「マジックメソッド」と呼ばれています!

__clone()このマジックメソッドはオブジェクトのクローン作成時に自動的に呼び出されます

オブジェクトのクローン作成時にこのマジックメソッドが自動的に呼び出されます!新しいクローンオブジェクトの初期化を担当します。

__set()

アクセスできないプロパティに値を割り当てる

アクセスできないプロパティに値を割り当てる:

__set()

__set()マジックメソッドを定義すると、

がアクセスできない属性に値を代入すると、が自動的にこのメソッドを実行します。このとき、処理能力はユーザー自身に与えられます。

このマジックメソッドには 2 つのパラメータが必要です: 1 つはアクセスできない属性の属性名です

1 つはアクセスできない属性の値です


__get()アクセスできないプロパティの値を取得します

アクセスできないプロパティの値を取得します: __get()

定義後__get() マジックメソッドでは、がアクセスできない属性の値を取得すると、が自動的にメソッドを実行します。このとき、処理能力はユーザー自身に与えられます。

この魔法のメソッドには、属性の属性名であるパラメーターが 1 つだけ必要です。


注:

__get__set 実際のプロジェクトでは両方のメソッドがペアで使用されることがよくあります。さらに、これら 2 つのメソッドは、オブジェクトのプライベート プロパティをバッチで処理するためによく使用されます。


上記のコードは、属性の元の内部構造が変更されないように、ユーザーによる属性の追加を制限することもできます。


__unset()アクセスできない属性を削除します

アクセスできない属性を削除します: __unset()

unset 関数を渡すことができます パブリック属性を削除しますオブジェクトの:

ただし、属性がアクセスできない場合 (private または存在しない場合)、削除できるかどうかは __unset メソッドが自動的に実行されます。 __unsetの内部実装について

このメソッドにも必要なパラメーターは、現在削除されている属性の名前である 1 つだけです。


__unsetで何も行わなかった場合、デフォルトでは削除できません(もちろんエラーは報告されません!)

__isset() アクセスできないかどうかを判断します属性が存在します

アクセスできない属性が存在するかどうかを判断します: __isset()

属性がアクセスできない属性の場合、属性が存在するかどうかを判断するときに、このメソッドの実行が自動的にトリガーされます。

同様に、このメソッドにもパラメーター、つまりテクノロジーが現在決定する必要がある属性名が必要です。

__call()アクセスできないオブジェクトメソッド(非静的メソッド)が呼び出されたとき

アクセスできないオブジェクトメソッド(非静的メソッド)が呼び出されたとき、マジックメソッドが自動的に実行されます!

考えてみます:

現時点で、このマジックメソッドにはいくつのパラメータが必要ですか?

パラメータ 1: メソッド名、stringtype

パラメータ 2: arraytype、パラメータの数が不確実であるため、すべてのパラメータを配列に入れることしかできません

このメソッドが何もしない場合:

__callstatic() アクセスできないクラスメソッド(静的メソッド)を呼び出す

アクセスできないクラスメソッド(静的メソッド)を呼び出すと、マジックメソッドは自動的にこのメソッドを定義するときは、メソッド名の前に static キーワードを追加する必要があります。これは、メソッドが静的メソッドである必要があるためです。

小さなケース

次の目的を達成するために数学クラスを設計します:

メソッドf1:

1を呼び出す、1パラメータが渡された場合、それらの値を返す平方根の合計

2、2パラメータが渡された場合、平方和

3が返され、

3パラメータが渡された場合、立方体の合計が返されます

これはメソッドのオーバーロードを使用して実現されます:

__invoke()

オブジェクトを関数 (またはメソッド) として呼び出すと、マジック メソッドが自動的に実行されます。現在ではあまり使われていません!

前に学んだ匿名関数を思い出してください:

注:

$func を使用してクロージャ オブジェクトで関数を正常に呼び出すことができる理由は、関数があるためです。クロージャオブジェクト内で__invokeMagicメソッド

__toString()

オブジェクトを文字列として使用すると、模倣メソッドが自動的に実行されます。

そして、このメソッドの戻り値は、通常、オブジェクトを文字列にシリアル化した結果である可能性があります。

実際、この時点でシステムは

__toStringこのメソッドの実行を自動的にトリガーします:

マジック定数

__CLASS__

は現在のクラス名を表します!

selfとの違いに注意してください: self

はクラス自体(単なるクラス名ではなく構造体)を指しますが、

__CLASS__は単なるクラス名です(クラス名は単なるクラス名です) )

__METHOD__

は現在のメソッド名を表します!

__LINE__ ファイル内の現在の行番号。 __ファイル__
いくつかのPHP「マジック定数」

名前

説明

ファイルのフルパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。

__DIR__

ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。 dirname(__FILE__)と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。

__FUNCTION__

関数名。この定数は、関数が定義されたときの関数の名前を返します (大文字と小文字は区別されます)。

__CLASS__

この定数は、クラスが定義されたときの名前を返します (大文字と小文字が区別されます)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機能することに注意してください。特性メソッド内で使用される場合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。

__TRAIT__

トレイトの名前。 PHP 5.4 以降、この定数は定義されたとおりの特性の名前を返します (大文字と小文字が区別されます)。トレイト名には、それが宣言されているスコープが含まれます (例: FooBar)。

__METHOD__

クラスのメソッド名 (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。

__NAMESPACE__

現在のネームスペースの名前 (大文字と小文字が区別されます)。

以上がPHP のマジック メソッドとマジック定数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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