ホームページ  >  記事  >  バックエンド開発  >  php __call __autoload __clone __toString __sleep_PHP教程

php __call __autoload __clone __toString __sleep_PHP教程

WBOY
WBOYオリジナル
2016-07-20 11:02:27846ブラウズ

、__ウェイクアップの詳しい説明

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

PHP チュートリアル 5 のオブジェクトには、新しい特別なメソッド __call() があり、このメソッドはオブジェクト内の他のオブジェクトを監視するために使用されます

方法。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。

例 7: __call

クラスフー{
function __call($name,$arguments) {
Print(「電話しましたか?私は $name です!」);
}
$x = 新しい foo();
$x->dostuff();
$x->fancy_stuff();
?>

この特別なメソッドを使用して「オーバーロード」アクションを実装し、チェックできるようにすることができます

パラメータを確認し、プライベート メソッドを呼び出して渡します。


2.__自動ロード
__autoload 関数。まだ定義されていないクラスを使用しようとすると自動的に呼び出されます。

以下の例を参照してください

msyql クラスを書きました

mysqlチュートリアル.php

クラスmysql{
関数 __construct(){
しかし }
}

次に、index.php ページで mysql クラスを使用したいので、そうします

関数 __authload($class){

include_once("path".$class.".php");
}

$mysql=新しいmysql();

?>

include_once("パス/".$class.".php");

path/ はクラスファイルが配置されているパスです

$classは呼び出し時のクラス名です

後ろの.phpはもちろん拡張子です

クラス ファイルがたくさんあると、あまり役に立たないと感じるかもしれません。

すべてのクラスをインクルードする必要がありますが、各ページの前に __autoload() を記述するだけです。

はい、

この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。

3、__構築、__破壊

コンストラクターとデストラクター [__construct __destruct()] ああ、クラス内での役割は

変数の初期化と破棄 例を見てみましょう

クラスデータベース

{

関数__construct()

{

$this->mconnid=mysql_connect ($this->dbhost,$this->dbuser,$this-

)
>dbpwd);//接続を確立します
mysql_select_db($ this-> dbname、$ this-> mconnid);
データベース

mysql_query("set names 'gbk'");//データベースのチュートリアル コードを gbk に設定します

}

//__destruct: デストラクター、切断

関数__destruct()

{

mysql_close($this->mconnid); //ここにはまだ問題があります...

}

}



現時点では、$aa = new db(); であれば、データの接続と終了を考慮する必要はありません。

詳細については、こちらをご確認ください:

http://www.bkjia.com/phper/18/aa7fc14039d6f49b02c646638588be7f.htm

4、__クローン

__クローンマジックメソッド

など、オブジェクトに値を直接割り当てることができることはわかっています。 $p2 = $p1; //これは 2 つの参照を持つオブジェクトです

それから私は以下を実行します:

$p1->say();

$p2->say();

どちらも実行でき、効果は同じです。

別の方法もあります:

$p3 = clone $p1; //clone は clone キーワードであることに注意してください。$p3 は

です。
新しいオブジェクト。

同時に、クラスにメソッドを追加します:

関数__clone()

{

$this->name = "私はコピーです"; //注: ここでの $this は、

ではなく、クローン作成によって生成されたオブジェクトそのものです。

は現在のクラスです
}


次に、以下を実行します:

$p3->say();


プリントアウト

名前: 私はコピーです

年齢:20歳

ここでは、オブジェクトのクローンを作成するときに __clone() メソッドが実行されることを理解しています。

新しくクローンされたコピー

属性の初期化やその他の操作を実行します。


5、__tostring

__tostringメソッドはオブジェクトを文字列に変換するときに自動的に呼び出されます

クラスがある場合:

クラスの人

{

プライベート $name = "";

プライベート $age = 0;

function __construct($name = “”, $age = “”)
{
$this->name = $name;
$this->年齢 = $年齢;
}

関数say()
{
echo "name:".$this->name."
”.”年齢:”.$this->年齢.”
”; }
}

次に、このクラスをインスタンス化して、このインスタンスを出力します。

$p1 = 新しい人(“liuzy”,20);

echo $p1; //直接印刷するとエラーが発生します

オブジェクトは参照ハンドルであり、直接印刷できないため、このようにオブジェクトを直接印刷するのは明らかに間違っています。これ

、__tostring() メソッドを使用できます。 personクラスに__tostring()メソッドを追加しましょう

:
関数__tostring()
{
「私は人間です、私の名前は「.$this->name」です。」を返します
”;
}
それでは、ページを更新してください。何が見つかりましたか?

__tostring() はオブジェクトを直接印刷するときに実行されるメソッドであることがわかりました。このメソッドを使用できます

印刷クラスに関するいくつかの関連情報。注: 2 つのアンダースコアです。メソッドには戻り値が必要です

6. _寝て_起きて
__sleepはシリアライズ時に使用されます
__wakeup は逆シリアル化中に呼び出されます

php がシリアル化しているとき、serialize() はクラスに __sleep() があるかどうかをチェックします。

この番号はシリアル化の前に実行されます。この関数は、シリアル化して保存する必要があるメンバー属性を返す必要があります

配列。この関数によって返されるメンバー属性のみをシリアル化します。この関数には 2 つの関数があります。

シリアル化する前に、オブジェクトが持つ可能性のあるデータベース接続などをすべて閉じます。次に、シリアル化する必要があるオブジェクトを指定します。

化されたメンバー属性。特定の属性が比較的大きく、保存する必要がない場合、__sleep に書き込む必要はありません

返された配列では、このプロパティはシリアル化されません

逆に、unserialize() はバイトストリームからオブジェクトを作成した後、すぐにそれが持っているかどうかをチェックします

__ウェイクアップ機能が存在します。存在する場合、__wakeup がすぐに呼び出されます。 __wakeup

を使用する目的

は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理します。

クラスユーザー

{
public $name;

public $id;
関数 __construct()
{
$this->id = uniqid();

異なるID

}

関数__sleep()

                                                                                         Return (Array ("name"); // これをサービス化しないでください - & gt; ID は

ではありません
シリアルID

}


関数__wakeup()
{

$this->id = uniqid() // ユーザーに一意の ID を与える

}
}

$u = 新規ユーザー;
$u->name = "はは";

$s = Serialize($u); // シリアル化する シリアル化しないように注意してください。
id 属性は行化され、id の値は破棄されます

$u2 = unserialize($s); //非シリアル化 ID を逆シリアル化します

再割り当て

//$u と $u2 は異なる ID を持ちます $u と $u2 は異なる ID を持ちます

var_dump($u); var_dump($u2);

?>

---------- PHP デバッグ ----------

オブジェクト(ユーザー)#1 (2) {
["名前"]=>
string(4) 「はは」
["id"]=>
文字列(13) "47fa045529f69"

}
オブジェクト(ユーザー)#2 (2) {

["名前"]=>
string(4) 「はは」
["id"]=>
文字列(13) "47fa04552a49a"
}


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445367.html技術記事 , __wakeupの詳しい説明 1. __call __call( $method, $arg_array ) 未定義のメソッドを呼び出す場合、このオブジェクトが呼び出されます このメソッドは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。