ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでマジック メソッドを探索する

PHP_PHP チュートリアルでマジック メソッドを探索する

WBOY
WBOYオリジナル
2016-07-13 17:18:55885ブラウズ

オブジェクト指向プログラミングでは、PHP が提供する多くのマジック メソッドを柔軟に使用することで、オブジェクト指向開発プロセスの多くの操作を簡素化できます。 PHP では、マジック メソッドは通常 2 つのアンダースコア (__) で始まります。 PHP の通常のメソッド (メソッドは関数とも呼ばれます) とは異なり、マジック メソッドは通常、特定の状況下でプログラムによって自動的に呼び出されますが、通常のメソッドは通常、手動で呼び出されます。マジック メソッドは非常に便利な機能を提供します。PHP には多くのマジック メソッドがあります。詳細については、ここで参照できる PHP マニュアルを参照してください。この記事では、よく使われる魔法の方法を簡単に紹介します。
1.準備
マジック メソッドの概念を完全に理解するには、これらのマジック メソッドをコード内で使用する必要があります。それらは単なる概念的なものであり、一度読んだだけでは忘れてしまうでしょう。したがって、ここでは最初に 2 つの単純なクラスを定義する必要があります。
通常、私たちは各クラスを個別のファイルで定義することに慣れており、クラス ファイルの名前は「classname.class.php」の形式で付けられます。ここでは 2 つの単純なクラスを定義します。1 つは Device クラス、もう 1 つは Battery クラスです。定義された 2 つのクラスは次のとおりです:
ファイル:Device.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
クラスデバイス{
public $name;
パブリック $battery;
public $data=array();
パブリック $connection;

保護された関数 connect(){
$this->connection='resource';
echo $this->name.'connected'.PHP_EOL;
}

保護された関数の切断(){
$ this-> connection = null;
echo $this->name.'切断'.PHP_EOL;
}
}
?>
ファイル:Battery.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
クラスバッテリー{
プライベート $charge=0;

パブリック関数 setCharge($charge){
$charge=(int)$charge;
If($charge $charge=0;
}その他{
$charge=100;
}
$this->charge=$charge;
}

}
?>
Device クラスでは、4 つのメンバー属性が定義されています。つまり、name はデバイスの名前を表すために使用され、battery は Battery オブジェクトの保存に使用され、data は配列として定義され、connection は外部リソースへのハンドルの保存に使用されます。 。このクラスでは、それぞれ接続を確立および切断するための 2 つのメンバー メソッド connect() および disconnect() も定義されています。
Battery クラスでは、charge の値を設定するためにプライベート プロパティ Charge とメンバー メソッド setCharge() のみが定義されています。
ここで定義されている 2 つのクラスには実際の用途はなく、単に誰もが PHP のマジック メソッドをよりよく理解できるようにするためのものです。
2. コンストラクターとデストラクター
コンストラクターとデストラクターは、オブジェクトの作成時と破棄時にシステムによって自動的に呼び出されます。
1.コンストラクター:__construct()
__construct 関数は、最もよく使用されるマジック関数です。オブジェクトが作成されると、コンストラクターで初期化操作、特にメンバー変数の初期化を実行できます。コンストラクターには任意の数のパラメーターを定義できます。何らかの理由でコンストラクターが正しく実行できない場合、オブジェクトの作成は失敗します。以下はDeviceクラスでコンストラクタを使用する例です。
1
2
3
4
5
6
パブリック関数 __construct($name,Battery $battery){
//バッテリーの値は、Battery クラスによってインスタンス化されたオブジェクトのみです
$this->バッテリー=$バッテリー;
$this->name=$name;
$this->connect();
}
このコンストラクターでは、コンストラクターに 2 つの仮パラメーターを指定し、それぞれメンバー属性の name と Battery に値を割り当て、またコンストラクター内のクラスの connect() 関数を呼び出します。
注: コンストラクターをプライベート メソッドとして宣言すると、プログラムがクラスの外部にクラスのインスタンス オブジェクトを直接作成できなくなります。これは、デザイン パターンのシングルトン パターンを実装するときによく使用されます。
コンストラクターを使用すると、次のコードのように Device クラスのオブジェクトをインスタンス化できます。
1 $device=新しいデバイス('iPhone',$battery);
2.デストラクター:__destruct()
コンストラクターとは対照的に、デストラクターは、オブジェクトが破棄されるときにシステムによって自動的に呼び出されます。クラス内でコンストラクターを定義する方法は次のとおりです:
1
2
3
パブリック関数 __destruct(){
$this->disconnect();
}
このデストラクターでは、オブジェクトが破棄される前に、まずクラス内のdisconnect()関数を呼び出します。
3. 属性のオーバーロード
PHP マニュアルの説明によると、PHP が提供する「オーバーロード」とは、クラスのプロパティとメソッドを動的に「作成」することを指します。私たちはこれを魔法の方法で行います。
オーバーロードされたメソッドは、現在の環境で未定義または非表示のクラス属性またはメソッドを呼び出すときに呼び出されます。つまり、クラス内でアクセス可能なメソッドまたは属性にアクセスするときに、オーバーロードされたメソッドは呼び出されません。オーバーロードされたメソッドはすべて public に宣言する必要があります。
1.__get()
アクセスできないプロパティの値を読み取る場合は、__get() が呼び出されます。
2.__set()
アクセスできないプロパティに値を割り当てる場合、__set() が呼び出されます。
3.__isset()
__isset() は、アクセスできないプロパティに対して isset() または empty() が呼び出されたときに呼び出されます。
4.__unset()
アクセスできないプロパティに対して unset() が呼び出される場合、 __unset() が呼び出されます。
4. オブジェクトを文字列に変換します:__toString()
__toString メソッドは、オブジェクトを通常の文字列として処理しようとするときに呼び出されます。たとえば、オブジェクトを出力すると、echo $object name などの関数が自動的に呼び出されます。__toString メソッドが定義されていない場合、PHP はエラーを返します。
5. オブジェクトのクローン:__clone()
オブジェクトのクローンを作成すると、マジックメソッド __clone() が自動的に呼び出されます
6. オブジェクトのシリアル化
シリアル化は、任意のデータを文字列形式に変換するプロセスです。シリアル化を通じて、完全なオブジェクトをファイルまたはデータベースに保存できます。シリアル化に関する問題の 1 つは、データベース接続など、すべてのデータをシリアル化できるわけではないことです。
1.__睡眠()
オブジェクトに対して Serialize() 関数を使用すると、__sleep() 関数が呼び出されます。
2.__ウェイクアップ()
オブジェクトに対して unserialize() 関数を使用すると、 __wakeup() 関数が呼び出されます。
7. メソッドのオーバーロード
1.__call()
アクセスできないメソッドがオブジェクトで呼び出される場合、__call() が呼び出されます。
2.__callStatic() (PHP 5.3)
静的モードでアクセスできないメソッドを呼び出すと、__callStatic() が呼び出されます。
8. オブジェクトを関数として使用する
1.__呼び出す
このメソッドは、オブジェクトを関数として使用しようとするときに呼び出されます。
9. クラスの自動ロード
1.__autoload()
このメソッドを使用すると、クラスをインスタンス化するときに、プログラムが自動的にクラス ファイルを見つけて、そのクラス ファイルを現在のスクリプトに読み込むことができるため、require の使用の多くが簡素化されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/621604.html技術記事オブジェクト指向プログラミングでは、PHP が提供する多くのマジック メソッドを柔軟に使用することで、オブジェクト指向開発プロセスの多くの操作を簡素化できます。 PHP では...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。