ホームページ バックエンド開発 PHPチュートリアル php __call __autoload __clone __toString __sleep_PHP教程

php __call __autoload __clone __toString __sleep_PHP教程

Jul 20, 2016 am 11:02 AM
autoload clone php sleep tostring 詳しい説明

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

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 までご連絡ください。

ホット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