ホームページ >バックエンド開発 >PHPチュートリアル >php __call __autoload __clone __toString __sleep_PHP教程
、__ウェイクアップの詳しい説明
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 クラスを書きました
path/ はクラスファイルが配置されているパスですmysqlチュートリアル.php
クラスmysql{
関数 __construct(){
しかし }
}
次に、index.php ページで mysql クラスを使用したいので、そうします
関数 __authload($class){
include_once("path".$class.".php");
$mysql=新しいmysql();
}
?>
include_once("パス/".$class.".php");
$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 は です。
新しいオブジェクト。
同時に、クラスにメソッドを追加します:
{
$this->name = "私はコピーです"; //注: ここでの $this は、ではなく、クローン作成によって生成されたオブジェクトそのものです。
は現在のクラスです}ここでは、オブジェクトのクローンを作成するときに __clone() メソッドが実行されることを理解しています。$p3->say();
次に、以下を実行します:
プリントアウト:
名前: 私はコピーです
年齢:20歳
新しくクローンされたコピー
属性の初期化やその他の操作を実行します。
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() はオブジェクトを直接印刷するときに実行されるメソッドであることがわかりました。このメソッドを使用できます
6. _寝て_起きて
__sleepはシリアライズ時に使用されます
__wakeup は逆シリアル化中に呼び出されます
この番号はシリアル化の前に実行されます。この関数は、シリアル化して保存する必要があるメンバー属性を返す必要があります
配列。この関数によって返されるメンバー属性のみをシリアル化します。この関数には 2 つの関数があります。
シリアル化する前に、オブジェクトが持つ可能性のあるデータベース接続などをすべて閉じます。次に、シリアル化する必要があるオブジェクトを指定します。化されたメンバー属性。特定の属性が比較的大きく、保存する必要がない場合、__sleep に書き込む必要はありません
返された配列では、このプロパティはシリアル化されません
逆に、unserialize() はバイトストリームからオブジェクトを作成した後、すぐにそれが持っているかどうかをチェックします
__ウェイクアップ機能が存在します。存在する場合、__wakeup がすぐに呼び出されます。 __wakeup
を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理します。
クラスユーザー
{public $name;オブジェクト(ユーザー)#2 (2) {public $id;
異なるID
関数 __construct()
{
$this->id = uniqid();}
Return (Array ("name"); // これをサービス化しないでください - & gt; ID は
関数__sleep()ではありません
}
シリアルID$this->id = uniqid() // ユーザーに一意の ID を与える
関数__wakeup()
{}
}$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"
["名前"]=>
string(4) 「はは」
["id"]=>
文字列(13) "47fa04552a49a"
}