検索

phpマジックメソッドのまとめ

php5 以降のバージョンでは、php クラスでマジック メソッドを使用できるようになりました。

PHP では、2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、関数名を __ で始めないことをお勧めします。

PHP のマジック メソッドは次のとおりです: __construct、__destruct、__call、__callStatic、__get、__set、__isset、__unset、__sleep、__wakeup、__toString、__set_state、__clone、__autoload

1、__get、__set

これら 2 つのメソッドは、クラスとその親クラスで宣言されていないプロパティ用に設計されています

__get( $property ) このメソッドは、未定義のプロパティが呼び出されたときにトリガーされ、渡されるパラメーターはアクセスされるプロパティの名前です

__set( $property, $value ) このメソッドは、未定義のプロパティに値を割り当てるときにトリガーされます。渡されるパラメーターは、設定されたプロパティの名前と値です。

ここでの非宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護されプライベートである属性 (つまり、アクセス許可がない属性) が含まれます。

2、__isset、__unset

__isset( $property ) このメソッドは、isset() 関数が未定義のプロパティに対して呼び出されたときに呼び出されます

__unset( $property ) このメソッドは、unset() 関数が未定義のプロパティに対して呼び出されたときに呼び出されます

__get メソッドおよび __set メソッドと同様に、ここでの no 宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護されプライベートである属性 (つまり、アクセス許可のない属性) が含まれます

3.__電話

__call( $method, $arg_array ) このメソッドは、未定義のメソッドを呼び出すときに呼び出されます

ここでの未定義メソッドには、アクセス権限のないメソッドが含まれます。メソッドが存在しない場合は、親クラスに移動してメソッドを見つけます。親クラスに存在しない場合は、__call を呼び出します。このクラスの () メソッド。このクラスに __call() メソッドがない場合は、親クラスの __call() メソッドに移動します。


4. __自動ロード

__autoload 関数。まだ定義されていないクラスを使用しようとすると自動的に呼び出されます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。

グローバル オートロード クラスを定義する場合は、spl_autoload_register() メソッドを使用して、処理クラスを PHP 標準ライブラリに登録する必要があります。

?

プレーンに表示クリップボードにコピー印刷?
  1. クラス ローダー??
  2. {??
  3. static function autoload_class($class_name)??
  4. {??
  5. //正しい $class_name クラスを探してインポートします。そうでない場合は例外がスローされます ??
  6. }??
  7. }??
  8. ??
  9. /**
  10. *?? オブジェクトの自動読み込みを設定します
  11. *?? spl_autoload_register ― 指定された関数を __autoload() 実装として登録します
  12. */??
  13. spl_autoload_register(array('Loader', 'autoload_class')); ??
  14. ??
  15. $a = new Test();//テストは自動読み込みを行う必要なくインスタンス化されます。多くのフレームワークは、このメソッドを使用してクラス ??
  16. を自動的にロードします。
  17. ??
  18. ?>??

注: __autoload 関数でスローされた例外は、catch ステートメント ブロックではキャッチできず、致命的なエラーの原因となるため、関数自体でキャッチする必要があります。

5、__construct、__destruct

__construct コンストラクター。このメソッドは、オブジェクトの作成時に呼び出されます。PHP4 と比較して、このメソッドを使用する利点は、コンストラクターが属するクラスの名前に関係なく、一意の名前を付けることができることです。 、変更しています クラス名を変更する場合、コンストラクター名を変更する必要はありません

__destruct デストラクター メソッドの場合、PHP はオブジェクトが破棄される前 (つまり、メモリからクリアされる前) にこのメソッドを呼び出します。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクト関連のリソースを破棄します。デストラクタを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、デストラクターが呼び出されます。

関数の名前空間内では、関数が返されたときにこれが発生します。

グローバル変数の場合、これはスクリプトの最後に発生します。

オブジェクトを明示的に破棄したい場合は、そのオブジェクトを指す変数に他の値を代入するか、通常は変数を NULL に割り当てるか、unset を呼び出します。

6.__クローン

PHP5 のオブジェクト割り当てでは参照割り当てを使用します。オブジェクトをコピーする場合は、このメソッドを呼び出すときに、オブジェクトは自動的に __clone マジック メソッドを呼び出します。オブジェクトをコピーするとき、これは __clone メソッドで実現できます。

7.__toString

__toString メソッドは、オブジェクトを文字列に変換するとき (echo を使用してオブジェクトを出力するときなど)、自動的に呼び出されます。

クラスがこのメソッドを実装していない場合、オブジェクトを echo で出力することはできません。そうでない場合は、「キャッチ可能な致命的なエラー: クラス テストのオブジェクトを文字列に変換できませんでした。

」と表示されます。

このメソッドは文字列を返す必要があります。

PHP 5.2.0 より前では、__toString メソッドは echo() または print() と組み合わせて使用​​した場合にのみ有効でした。 PHP 5.2.0 以降では、任意の文字列環境 (%s 修飾子を使用した printf() など) で有効になりますが、非文字列環境 (%d 修飾子の使用など) では使用できません。 PHP 5.2.0 以降、__toString メソッドが定義されていないオブジェクトが文字列に変換されると、E_RECOVERABLE_ERROR エラーが報告されます。

8、__寝、__起き

__sleep は

をシリアル化するときに使用されます

__wakeup は逆シリアル化中に呼び出されます

serialize() は、クラス内にマジック名 __sleep を持つ関数があるかどうかを確認します。その場合、関数はシリアル化の前に実行されます。これはオブジェクトをクリアし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す必要があります。

__sleep を使用する目的は、オブジェクトが持つデータベース接続を閉じたり、保留中のデータを送信したり、同様のクリーンアップ タスクを実行したりすることです。さらに、この機能は、完全に保存する必要のない非常に大きなオブジェクトがある場合に便利です。

逆に、unserialize() はマジック名 __wakeup を持つ関数の存在をチェックします。この関数は、オブジェクトが持つ可能性のあるリソースが存在する場合、それを再構築できます。

__wakeup を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、その他の再初期化タスクを処理することです。

9. __set_state

この静的メソッドは、var_export() が呼び出されたときに呼び出されます (PHP 5.1.0 以降で有効)。

このメソッドの唯一のパラメータは配列です。これには、array('property' => value, …) の形式で配置されたクラス プロパティが含まれます。

10、__invoke

関数を呼び出してオブジェクトを呼び出そうとすると、__invoke メソッドが自動的に呼び出されます。

PHP5.3.0以降が有効です

11.__callStatic

これは __call() マジック メソッドと同様に機能します。__callStatic() は静的メソッド呼び出しを処理します。

PHP5.3.0以降が有効です

PHP は __callStatic() メソッドの定義を厳格化しています。メソッドは public でなければならず、static として宣言する必要があります。同様に、__call() マジック メソッドは、他のすべてのマジック メソッド

と同様に、パブリックとして定義する必要があります。

=========================================== === =====================

PHP は、__ (2 つのアンダースコア) で始まるすべてのクラス メソッドをマジック メソッドとして扱います。したがって、独自のクラス メソッドを定義する場合は、そのメソッドの先頭に __ を付けないでください。

?

1__construct()

オブジェクトをインスタンス化するとき、オブジェクトのコンストラクターが最初に呼び出されます。

php5同じオブジェクト モデルとクラス名を持つ関数がクラスのコンストラクターであることがわかります。その場合、コンストラクターと __construc( ) メソッド、php5 はデフォルトで __contruct() を呼び出し、同じ名前なので、 __contruct() がクラス になります。

?

2

__destruct()

デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。

?

3

, __get(string $name)存在しないプロパティを読み取ろうとすると

が呼び出されます。オブジェクトに存在しないプロパティを読み取ろうとすると、php がエラーを返します。メッセージ。 __get メソッドをクラスに追加すると、この関数を使用して java でのリフレクションと同様のさまざまな操作を実装できます。

?

4, __set(string $name,mixed $value)

未定義の変数に値を代入するときに呼び出されます

?

5, __call(string $name, array $arguments)

アクセスできないメソッド (未定義、非表示など) を呼び出す場合、__call() が呼び出されます。

__callStatic(string $name, array $arguments)

静的メソッド内でアクセスできないメソッド (未定義、非表示など) を呼び出す場合、__callStatic() が呼び出されます。

?

6__toString()

は、オブジェクトを印刷するときに呼び出されます。このメソッドは、javatoString メソッドと似ています。この関数は、オブジェクトを直接印刷するときにコールバックされます。

?

7__clone()

オブジェクトが複製されるときに呼び出されます。

?

8__sleep()

serialize()この関数は、マジック メソッド __sleep があるかどうかを確認します。存在する場合は、__sleep( ) メソッドが最初に呼び出され、 が呼び出され、次にシリアル化操作が実行されます。この関数を使用すると、オブジェクトをクリーンアップし、オブジェクト内のすべての変数の名前を含む配列を返すことができます。メソッドが何も返さない場合、NULL がシリアル化され、結果として E_NOTICE が返されます。 エラー。 __sleep メソッドは、コミットされていないデータや同様の操作を送信するためによく使用されます。同時に、この機能は、保存する必要のない大きなオブジェクトがある場合に非常に便利です。

?

9__wakeup()

は、__sleep() unserialize() の逆です。 __wakeup メソッドがあるかどうかを確認します。存在する場合、 __wakeup メソッドが最初に呼び出され、オブジェクト データを事前に準備します。 __wakeup は、データベース接続の再確立やその他の初期化操作の実行など、逆シリアル化操作でよく使用されます。


10__isset()

未定義の変数 isset() または を呼び出す場合 empty()、__isset() が呼び出されます。

?

11__unset()

unset は、オブジェクトのプロパティが設定解除されるときに呼び出されます。例: unset($c->name)

?

12__set_state()

var_export を呼び出すときに呼び出されます。 __set_stateの戻り値をvar_exportの戻り値として使用します。

?

13__autoload()

オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。簡単に言えば、クラス;PHP未編成のクラスを使用しようとしたときの自動読み込みです。 、この関数が存在する場合は、__autoload グローバル関数 を検索します。 ,PHP はパラメーター を使用して呼び出します。 パラメーターはクラスの名前です。 ?

14

__invoke() 関数を呼び出してオブジェクトを呼び出そうとすると、__invoke

メソッドが自動的に呼び出されます。 ?

魔法定数

:

__LINE__

ファイル内の現在の行番号。

? __FILE__

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

PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場合は解決された絶対値) が含まれます。パス)、以前のバージョンには相対パスが含まれる場合がありました。 ? __DIR__

ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。これは、

dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機能) =? __FUNCTION__

関数名 (

PHP 4.3.0 で新しく追加された )。 PHP 5 以降、この定数は定義されたときの関数の名前を返します (大文字と小文字は区別されます)。 PHP 4 では、値は常に小文字です。 ? __CLASS__

クラスの名前 (

PHP 4.3.0 の新機能 )。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。 PHP 4 では、値は常に小文字です。 ? __METHOD__

クラスのメソッド名 (

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

現在のネームスペースの名前 (大文字と小文字は区別されます)。この定数はコンパイル時に定義されます (

PHP 5.3.0 の新機能 ) ?

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター