ホームページ バックエンド開発 PHPチュートリアル PHP5 のマジック メソッド_PHP チュートリアル

PHP5 のマジック メソッド_PHP チュートリアル

Jul 14, 2016 am 10:08 AM
php php5 による 使用 方法 バージョン 親切 規制 魔法

PHP 5 以降、PHP のクラスでマジック メソッドを使用できるようになりました。 2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、関数名を __ で始まらないことが推奨されます。

1. __get、__set
これら 2 つのメソッドは、クラスとその親クラスで宣言されていないプロパティ用に設計されています。
◆__get( $property ) このメソッドは、未定義のプロパティが呼び出されたときにトリガーされ、渡されるパラメータはアクセスされるプロパティの名前です。
◆__set($property, $value) 未定義のプロパティに値を割り当てる場合、このメソッドがトリガーされ、渡されるパラメータは設定するプロパティ名と値です。
ここでの非宣言には、オブジェクトを使用して呼び出された場合にアクセス制御が保護されプライベートである属性(つまり、アクセス権限を持たない属性)が含まれます。
2. __isset、__unset
◆__isset( $property ) このメソッドは、未定義のプロパティに対して isset() 関数が呼び出されたときに呼び出されます。
◆__unset( $property ) このメソッドは、未定義のプロパティに対して unset() 関数が呼び出されたときに呼び出されます。
ここでの未宣言には、__getメソッドや__setメソッドと同様に、オブジェクトを使って呼び出した場合にアクセス制御が保護されプライベートになっている属性(つまり、アクセス権限を持たない属性)が含まれます。
3.__電話
__call( $method, $arg_array ) このメソッドは、未定義のメソッドを呼び出すときに呼び出されます。
ここでの未定義のメソッドには、アクセス権限を持たないメソッドも含まれます。メソッドが存在しない場合は、親クラスに移動してメソッドを見つけます。親クラスに存在しない場合は、このメソッドの __call() メソッドを呼び出します。このメソッドの場合 __call() メソッドがクラスに存在しない場合は、親クラスの __call() メソッドに移動します。
4.__オートロード
まだ定義されていないクラスを使用しようとしたときに自動的に呼び出される__autoload関数。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。
グローバル オートロード クラスを定義する場合は、 spl_autoload_register() メソッドを使用して、処理クラスを PHP 標準ライブラリに登録する必要があります。
[php]
クラスローダー
{
静的関数 autoload_class($class_name) {
//正しい $class_name クラスを見つけて導入します。そうでない場合は、例外がスローされます
}
}
/**
* オブジェクトの自動読み込みを設定します
* spl_autoload_register — 指定された関数を __autoload() 実装として登録します
*/
spl_autoload_register(array('Loader', 'autoload_class'));
$a = new Test();// 多くのフレームワークは、このメソッドを使用してクラスを自動的にロードします。
クラスローダー
{
静的関数 autoload_class($class_name) {
//正しい $class_name クラスを見つけて導入します。そうでない場合は、例外がスローされます
}
}
/**
* オブジェクトの自動読み込みを設定します
* spl_autoload_register — 指定された関数を __autoload() 実装として登録します
*/
spl_autoload_register(array('Loader', 'autoload_class'));
$a = new Test();//テストは自動ロードを必要とせずにインスタンス化されます。多くのフレームワークはこのメソッドを使用してクラスを自動的にロードします
注: __autoload 関数でスローされた例外は、catch ステートメント ブロックではキャッチできず、致命的なエラーの原因となるため、関数自体でキャッチする必要があります。
5. __construct、__destruct
◆__construct コンストラクター、このメソッドはオブジェクトの作成時に呼び出されます。PHP4 と比較して、このメソッドを使用する利点は、クラスの名前に関係なく、コンストラクターに一意の名前を付けることができることです。クラスを変更しているので、コンストラクターの名前を変更する必要はありません。
◆__destruct デストラクター メソッドでは、PHP はオブジェクトが破棄される前 (つまり、メモリからクリアされる前) にこのメソッドを呼び出します。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクト関連のリソースを破棄します。デストラクタを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、デストラクターが呼び出されます。
関数の名前空間内では、関数が返されたときにこれが発生します。グローバル変数の場合、これはスクリプトの最後に行われます。オブジェクトを明示的に破棄したい場合は、そのオブジェクトを指す変数に他の値を割り当てることができます。通常は、変数に NULL を割り当てるか、unset を呼び出します。
6.__クローン
PHP 5 のオブジェクト割り当ては参照割り当てを使用します。オブジェクトをコピーする場合は、このメソッドを呼び出すときにオブジェクトが自動的に __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 (PHP 5.3.0以降で有効)
関数を呼び出してオブジェクトを呼び出そうとすると、__invokeメソッドが自動的に呼び出されます。
11. __callStatic (PHP 5.3.0以降で有効)
__call() マジックメソッドと同様に動作し、__callStatic() は静的メソッド呼び出しを処理します。
PHP は __callStatic() メソッドの定義を厳格化しています。このメソッドは public でなければならず、static として宣言する必要があります。同様に、 __call() マジック メソッドは、他のすべてのマジック メソッドと同様に、パブリックとして定義する必要があります

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477768.html技術記事 PHP 5 以降、PHP のクラスでマジック メソッドを使用できるようになりました。 2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、関数名を使用しないことをお勧めします...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles